就像标题已经说过的那样,我正在尝试使全屏视图(使其扩展到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)
根据 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)
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)
小智 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”仍然可以工作。
我在苹果论坛上发现了类似的讨论,解释了失败的潜在原因:
如果设置不正确,那么听起来您的应用程序正在启动到兼容模式,该模式正在对您的应用程序进行信箱处理。
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |