Пустой просмотр не отображается в iOS 15, Xcode 13

#ios #xcode #swiftui #popup #ios15

Вопрос:

У меня серьезная проблема. Моя версия Xcode-13, версия iOS-15.

 import SwiftUI

struct ContentView: View {
  @State var isGo: Bool = false

  var body: some View {
    ZStack {
      Button(action: {
        self.isGo = true
      }, label: {
        Text("Go EmptyView")
      })

      EmptyView()
        .background(Color.green)
        .frame(width: 100, height: 100)
        .sheet(isPresented: $isGo, onDismiss: nil, content: {
          PopupView()
        })
    }
  }
}

struct PopupView: View {
    var body: some View {
        Rectangle()
            .fill(Color.green)
    }
}
 

Приведенный выше код не работает. Но предыдущая версия Xcode или предыдущая версия iOS-это то, что код работает. Это ошибка iOS? Есть ли какое-нибудь решение?

Комментарии:

1. Есть ли причина, по которой ты EmptyView так пользуешься? Почему бы, например, не использовать, если вы уже устанавливаете фон, просто использовать Color.green ?

2. Ваш код никогда не будет работать! даже с iOS 13.0 или 14.0 это невозможно! Пустой просмотр ничего не значит для SwiftUI! Это все равно что умножить ноль на миллион! каков был бы результат?

3. Нет, это работает в iOS 13, 14. В моем проекте используется слишком много пустых представлений. Я не могу изменить другого….

4. У меня также возникает та же проблема с пустым представлением, если вы можете ее решить, пожалуйста, предоставьте решение, в моем коде я использую пустое представление для представления всего экрана, так как существует несколько условий, поэтому требуется пустое представление, которое мы напрямую не можем использовать .overfullscreen

5. Ответ был дан ниже, надеюсь, это решит проблему.

Ответ №1:

Вы очень близки, не знаете, почему никто не предложил помощь. Ваш код действительно работает, но теоретически неверен, вам нужно было переместить то, куда вы звонили .sheet , за пределы вашего ZStack , и это работает. Но вот лучший подход без всего бесполезного кода.

 struct ContentView: View {
    @State var showemptyview: Bool = false
    
    var body: some View {
        Button("Go EmptyView") {
            showemptyview.toggle()
        }
        .sheet(isPresented: $showemptyview) {
            EmptyView()
                .background(Color.green)
        }
    }
}
 

введите описание изображения здесь

Комментарии:

1. Обычно вам нужно несколько пустых просмотров для разных листов. Ваше дело работает только для одного листа, если вы добавите еще один, он не будет работать. И прямо сейчас, начиная с iOS 15 и новой версии, вы можете применить несколько листов к одному представлению. Наконец-то!

Ответ №2:

Наконец, в последней версии вы можете использовать несколько листов непосредственно для основного просмотра, и это работает. Вам не нужно создавать отдельный EmptyView() с листом

 YourMainView()
  .sheet(item: $viewModel) { item in
    // some logic here 
  }
  .sheet(isPresented: $onther_viewModel.showView, content: {
    SomeAnotherView(viewModel: viewModel.getVM())
  })
  .sheet(isPresented: $onther_viewModel2.showView, content: {
    SomeView(viewModel: viewModel.getVM())
  })
 

Комментарии:

1. Это не работает на ios14