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

iOS 15中使用EmptyView调用fullScreenCover切换视图失效如何解决

问题原因

iOS 15对SwiftUI的视图渲染优化逻辑做了调整,零大小的EmptyView会被系统从渲染树中直接剔除,依附在它之上的fullScreenCover修饰符也会随之失效,因此状态更新时没有对应的视图载体触发弹窗跳转。

修复方案
  • 方案1:将fullScreenCover修饰符移动到上层可见视图上(最推荐,兼容性最好)
    不要把fullScreenCover挂载在不可见的EmptyView上,直接绑定到外层的Color或者ZStack上即可,修改后的代码示例:
struct SplashView: View {
    @ObservedObject var model = SplashViewModel()

    func verify() { // 注意原代码方法名匹配问题,此处对齐onAppear的调用
       model.isActive = true
    }

    var body: some View {
        Color.init(hex: "#FFFFFF")
            .fullScreenCover(isPresented: $model.isActive) { QueryView() } // 修饰符移到可见视图层
            .overlay(
                ZStack {
                    VStack {
                        GeometryReader { gp in
                            ZStack {
                                Image("logo")
                                    .resizable()
                                    .aspectRatio(contentMode: .fit)
                                    .padding(EdgeInsets(top: 35, leading: 20, bottom: 10, trailing: 20))
                                    .frame(width: UIScreen.main.bounds.width * 0.75)
                                    .position(x: gp.size.width / 2, y: gp.size.height / 2)
                                    .onAppear {
                                        DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
                                            self.verify()
                                        }
                                    }
                            }
                        }
                    }
                }
            ).ignoresSafeArea(.all)
    }
}
  • 方案2:替换EmptyView为不会被系统优化的占位视图
    如果不想调整修饰符的位置,可以把EmptyView替换为有明确大小的透明占位视图,避免被系统优化剔除:
// 把原来的EmptyView().fullScreenCover(...)替换为以下代码即可
Color.clear
    .frame(width: 1, height: 1)
    .opacity(0)
    .fullScreenCover(isPresented: $model.isActive) { QueryView() }
  • 额外注意点:原代码中存在方法名不匹配的问题,onAppear中调用的是verify()方法,但定义的方法名为verifyMantinance(),请自行对齐避免逻辑错误。

内容的提问来源于stack exchange,提问作者Benjamin RD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:45:03