You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 15、Xcode 13环境下EmptyView无法显示问题求助

问题解答

这是不是iOS系统Bug?

不是,这是SwiftUI在iOS 15(Xcode 13对应SDK版本)的预期行为变更:iOS 14及更早版本中,给EmptyView附加frame、background等修饰符后,系统会将其作为有效渲染视图加入视图树;但iOS 15之后,EmptyView无论附加任何修饰符,都不会被系统计入有效渲染视图层级,依附在它身上的sheet弹窗自然无法被触发。

可行解决方案

  • 方案1:将sheet修饰符挂载到有效视图上
    直接把sheet绑到ZStack或者Button这类实际会渲染的视图上即可,修改后代码示例:
    struct ContentView: View {
      @State var isGo: Bool = false
    
      var body: some View {
        ZStack {
          Button(action: {
            self.isGo = true
          }, label: {
            Text("Go EmptyView")
          })
        }
        .sheet(isPresented: $isGo, content: {
          PopupView()
        })
      }
    }
    
  • 方案2:替换EmptyView为可渲染的占位视图
    把EmptyView换成Color.clear这类会被系统正常渲染的占位元素,原有其他逻辑不用动:
    Color.clear
      .background(Color.green)
      .frame(width: 100, height: 100)
      .sheet(isPresented: $isGo, onDismiss: nil, content: {
        PopupView()
      })
    
  • 方案3:将弹窗状态声明提升到父容器层级统一管理
    多弹窗场景下更推荐这种写法,避免视图层级变化导致弹窗绑定失效,稳定性更高。

内容的提问来源于stack exchange,提问作者윤시완

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:45:06