- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个带有 ListView 的 SwiftUI UI,我想在 ListView 的一部分上放置一个面板,上面有一个按钮。
在底部有安全区域(没有物理主页按钮)的设备上,我希望面板转到屏幕底部。但我想确保面板上的按钮不会延伸到安全区域。
在我的示例代码中,HStack
是包含按钮的面板。我尝试添加 .edgesIgnoringSafeArea(.bottom)
到它,但这不允许它延伸到底部。这让我有点困惑,因为列表在同一个 ZStack
中。延伸到底部安全区域。
当我添加 .edgesIgnoringSafeArea(.bottom)
到 ZStack
, HStack
(蓝色面板)允许延伸到屏幕底部的安全区域。这就是我想要的,但是一旦我这样做了,我怎么能告诉 Button
那是 HStack
的 child 不要忽略安全区域?
我知道如何在 UIKit 中执行此操作,但我真的希望能够在 SwiftUI 中构建此 UI。我可以手动添加一些填充或 Spacers 以在 Button
下添加额外的填充考虑到安全区域,但是在没有底部安全区域的带有主页按钮的设备上会有额外的间距。我想找出一个优雅的解决方案,我可以依靠系统来定义其安全区域,而不是手动定义任何数字间距或为不同设备创建条件情况。
struct ContentView: View {
var body: some View {
ZStack(alignment: .bottom) {
List {
Text("Item 1")
Text("Item 2")
Text("Item 3")
}
HStack {
Spacer()
Button(action: {
// do something
}){
Text("Button")
.font(.title)
.padding()
.background(Color.green)
.foregroundColor(.white)
.cornerRadius(15)
}.padding()
Spacer()
}.background(Color.blue).edgesIgnoringSafeArea(.bottom)
}
}
}
最佳答案
您可以使用 GeometryReader 访问安全区域的高度。然后您可以使用安全区域的高度作为按钮的底部填充或偏移。
https://developer.apple.com/documentation/swiftui/geometryproxy
struct ContentView: View {
var body: some View {
GeometryReader { proxy in
ZStack(alignment: .bottom) {
List {
Text("Item 1")
Text("Item 2")
Text("Item 3")
}
HStack {
Spacer()
Button(action: {
// do something
}){
Text("Button")
.font(.title)
.padding()
.background(Color.green)
.foregroundColor(.white)
.cornerRadius(15)
}
.padding(.bottom, proxy.safeAreaInsets.top)
Spacer()
}.background(Color.blue)
}.edgesIgnoringSafeArea(.bottom)
}
}
}
关于ios - 如何在 SwiftUI 中使用 edgeIgnoringSafeArea,但让 subview 尊重安全区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60676722/
我有一个打印的目录,上面有领导(例如末尾的页码) #table-of-contents ol a::after { content: leader(space) target-counter(
我在这个项目中使用 Flutter 的原因是为了在 1 个代码库中同时获得 Android 和 iphone。 Android 应用程序看起来不错,底部导航栏位于屏幕主页上。 然而,iphone 版本
我有一个用 objective-c 编写的 iPad 应用程序,它在 UIVew 的底部有一个工具栏。 在 ios10 中,栏位于屏幕的绝对底部,然后我将图像、流等放置在该栏上方并延伸到栏的正上方。
我是一名优秀的程序员,十分优秀!