【问题标题】:EmptyView is not showing in iOS 15, Xcode 13EmptyView 未在 iOS 15、Xcode 13 中显示
【发布时间】:2021-09-28 01:43:25
【问题描述】:

我有严重的问题。我的 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的错误吗?有什么解决办法吗?

【问题讨论】:

  • 你有这样使用EmptyView的原因吗?例如,既然您已经设置了背景,为什么不使用Color.green
  • 您的代码将永远无法工作!即使使用 iOS 13.0 或 14.0 也是不可能的! EmptyView 对 SwiftUI 毫无意义!这就像将零乘以一百万!结果会怎样?
  • 不,它适用于 iOS 13、14。我的项目使用了太多的 Empty View。我不能改变另一个......
  • 我也遇到同样的空视图问题如果你能解决它请提供解决方案,在我的代码中我使用空视图来呈现全屏,因为有多个条件所以空视图需要我们直接无法使用 .overfullscreen
  • 下面提供了答案,希望能解决问题。

标签: ios xcode swiftui popup ios15


【解决方案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)
        }
    }
}

【讨论】:

  • 通常您需要多个 EmptyViews 用于不同的工作表。如果您要添加另一张,则您的案例仅适用于一张纸,但它不起作用。现在,从 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())
  })

【讨论】:

  • 这在 ios14 上不起作用
【解决方案3】:

用“Spacer().frame(height:0)”替换“EmptyView()”在 iOS15 和 iOS14 上对我有用

【讨论】:

  • 您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的更多信息来改进。
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2021-11-16
  • 2019-11-25
  • 2021-11-18
  • 2021-12-05
  • 1970-01-01
相关资源
最近更新 更多