Dam*_*zzi 4 xcode uiview ios swift swiftui
在 5 月 SwiftUI 视图中,我尝试显示一个简单的顶部蓝色条、一个红色矩形和一个下部条,正如您从附图中看到的那样,顶部有一个奇怪的白色空间,顶部有一个红色矩形,我想删除但我不明白为什么会存在。
这是简单的代码:
var body: some View {
GeometryReader { geometry in
VStack {
//upper top bar
HStack{
Text("TOP BAR")
}.frame(width: geometry.size.width, height: geometry.size.height/10)
.background(LinearGradient(gradient: Gradient(colors: [Color("BlueW"), Color("DARK")]), startPoint: .topLeading, endPoint: .bottomTrailing).shadow(radius: 2)).edgesIgnoringSafeArea(.all)
// <<<<<<<<<<<<<<<<<<< PROBLEM HERE <<<<<<<<<<<<<<<<<<
// testing rectangle
Rectangle().foregroundColor(.red)
//lower bar
ZStack {
HStack {
Image(systemName: "house")
.resizable()
.aspectRatio(contentMode: .fit)
.padding(20)
.frame(width: geometry.size.width/3, height: 75)
.foregroundColor(self.viewRouter.currentView == "home" ? .black : .gray)
.onTapGesture {
self.viewRouter.currentView = "home"
}
ZStack {
Circle()
.foregroundColor(Color.white)
.frame(width: 75, height: 75)
Button(action: {
self.isAddPresented = true
}) {
Image(systemName: "plus.circle.fill")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 75, height: 75)
.foregroundColor(.green)
.rotationEffect(Angle(degrees: self.showPopUp ? 90 : 0))
}
.sheet(isPresented: self.$isAddPresented) {
AirportView(dm: self.dm, airport: self.general.airportData, dismissFlag: self.$isAddPresented)
}
}
.offset(y: -geometry.size.height/10/2)
.onTapGesture {
withAnimation {
self.showPopUp.toggle()
}
}
Image(systemName: "paperplane.fill")
.resizable()
.aspectRatio(contentMode: .fit)
.padding(20)
.frame(width: geometry.size.width/3, height: 75)
.foregroundColor(self.viewRouter.currentView == "routekit" ? .black : .gray)
.onTapGesture {
self.viewRouter.currentView = "routekit"
}
}.frame(width: geometry.size.width, height: geometry.size.height/10)
.background(LinearGradient(gradient: Gradient(colors: [Color("BlueW"), Color("DARK")]), startPoint: .topLeading, endPoint: .bottomTrailing).shadow(radius: 2))
}
}
}.edgesIgnoringSafeArea(.bottom)
}
Run Code Online (Sandbox Code Playgroud)
问题在于其HStack边缘忽略了所有安全区域 ( .edgesIgnoringSafeArea(.all))。
正如您所看到的,如果您检查视图,您的绿色视图 ( HStack) 实际上位于 的内部GeometryReader,但其框架位于外部。
解决办法:删除.edgesIgnoringSafeArea(.all).
但新的问题是,顶部安全区域会有一个空白区域。
解决方案:
设置GeometryReader.edgesIgnoringSafeArea([.top, .bottom])
瞧!
| 归档时间: |
|
| 查看次数: |
3928 次 |
| 最近记录: |