如何使SwiftUI全屏显示?

tim*_*mfr 1 ios swift swiftui

就像标题已经说过的那样,我正在尝试使全屏视图(使其扩展到SafeArea),但SwiftUI似乎总是将视图与对齐safeArea

经过一段时间的研究,我发现.edgesIgnoringSafeArea(.all)这似乎是一种非常简单的方法。问题是它不起作用。视图仍然不是全屏。这是一些示例代码:

struct ContentView : View {
    var body: some View {
        Text("Test")
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .edgesIgnoringSafeArea(.all)
            .background(Color.red)
    }
}
Run Code Online (Sandbox Code Playgroud)

Isl*_*mov 7

根据 iOS 14 的 Apple文档,您可以使用 fullScreenCover(item:onDismiss:content:)

这是示例代码:

struct ContentView: View {
    @State private var isFullScreen = false
    var body: some View {
        ZStack{
        Color.yellow.edgesIgnoringSafeArea(.all)
        Text("Hello, FullScreen!")
            .padding()
            .background(Color.blue)
            .foregroundColor(.green)
            .cornerRadius(8)
            .fullScreenCover(isPresented: $isFullScreen) {
                FullScreen(isFullScreen: $isFullScreen)
            }
            .onTapGesture {
                isFullScreen.toggle()
            }
    }
    }
}

struct FullScreen: View {
    @Binding var isFullScreen: Bool
    
    var body: some View {
        ZStack {
            Color.red.edgesIgnoringSafeArea(.all)
            Text("This is full screen!!")
                .onTapGesture {
                    self.isFullScreen.toggle()
                }
            
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,这并不是全尺寸纸张的解决方案,尽管对于底层用例来说是一个非常好的解决方案。非常感谢,感谢您的代码。 (2认同)

Sha*_*von 6

Just swap the ..background(Color.red) and .edgesIgnoringSafeArea(.all). And it will work perfectly.

struct ContentView : View {

    var body: some View {
        Text("Test")
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
            .background(Color.red)
            .edgesIgnoringSafeArea(.all)

    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是一个错误,它让您可以灵活地选择想要发生的事情,尽管在某种程度上相当令人困惑和尴尬。基本上,颜色在被任何后续修改器调整大小之前应用于视图。首先应用颜色,然后应用填充物之类的东西,额外的填充物没有着色。先填充,然后着色,您就可以得到全尺寸视图的颜色。 (4认同)
  • 这很奇怪,我实际上已经尝试过,但现在似乎有效。也许这只是测试版中的一个小故障。不管怎么说,还是要谢谢你。 (3认同)

小智 5

使用SwiftUI的增强现实应用程序也存在进入全屏的问题。(Xcode 12.3、SwiftUI 5.3)

struct ContentView : View {
    var body: some View {
        return ARViewContainer().edgesIgnoringSafeArea(.all)
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码来自AR模板。然而,这不起作用。

解决方案很棘手:您必须在“[yourTarget] -> 常规 -> 应用程序图标和启动图像”中将“LaunchScreen.storyboard”设置为“启动屏幕文件”。如果项目中没有“LaunchScreen.storyboard”,则在该字段中输入“LaunchScreen”仍然可以工作。

我在苹果论坛上发现了类似的讨论,解释了失败的潜在原因:

如果设置不正确,那么听起来您的应用程序正在启动到兼容模式,该模式正在对您的应用程序进行信箱处理。

  • 我有同样的问题,但我使用的是 SwiftUI 和 SpriteKit。无论出于何种原因,它都不会进入全屏。尽管我没有启动屏幕文件,但我尝试了此操作,并且它有效。我花了好几个小时在这件事上摸不着头脑。我很高兴它现在可以工作了。 (2认同)