我希望完全为我的应用程序背景上色,同时将内容放在顶部,以使其与状态栏和具有该功能的设备上的顶部位置相距足够远。
如果我做这样的事情:
@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
VStack {
Text("Top of my view")
Spacer()
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.yellow)
}
}
}
这将在内容顶部的安全区域下方显示文本。但是只有内容区域是黄色的。安全区域为白色。
因此,我在.edgesIgnoringSafeAreas(.all)
修饰符下方添加了.background
。
现在,我的文字在刻痕下方(或者在状态栏文字下方的屏幕顶部出现了斑点),并且不可见。
我不想随机猜测顶部填充,因为这在带有缺口的手机上可能很好,但在没有通知的手机或iPad上看起来是错误的。
如果我将VStack
放在GeometryReader
内,则忽略顶部安全区域时reader.safeAreaInsets.top
为零(0)。
我希望这是一个足够清楚的问题。有没有人遇到这个问题并有解决方案?
答案 0 :(得分:1)
您只需将edgesIgnoringSafeArea
修饰符应用于Color.yellow
。
可能的解决方案是使用ZStack
:
@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
ZStack {
Color.yellow
.edgesIgnoringSafeArea(.all)
VStack {
Text("Top of my view")
Spacer()
}
}
}
}
}
答案 1 :(得分:1)
一种解决方法是将.edgesIgnoringSafeArea(.all)
仅应用于Color.yellow
内部的.background()
:
@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
VStack {
Text("Top of my view")
Spacer()
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.yellow.edgesIgnoringSafeArea(.all))
}
}
}