使用 SwiftUI,我试图将 aView在屏幕上居中,然后给它一个可变高度的页眉和/或页脚。
使用约束,它看起来像这样:
let view = ...
let header = ...
let footer = ...
view.centerInParent()
header.pinBottomToTop(of: view)
footer.pinTopToBottom(of: view)
Run Code Online (Sandbox Code Playgroud)
这样view,无论页眉和页脚的大小如何,都将始终位于屏幕中央。
我不知道如何用 SwiftUI 来完成这个。使用任何类型的HStack或VStack意味着 的大小header并footer推动view。我想避免硬编码任何高度,因为中心的view大小也可能不同。
有任何想法吗?SwiftUI 的新手,因此非常感谢您的建议!
如果我正确理解了你的目标(因为,正如 @nayem 评论的那样,我第一次似乎错过了),以下方法应该会有所帮助。

代码快照:
extension VerticalAlignment {
private enum CenteredMiddleView: AlignmentID {
static func defaultValue(in dimensions: ViewDimensions) -> CGFloat {
return dimensions[VerticalAlignment.center]
}
}
static let centeredMiddleView = VerticalAlignment(CenteredMiddleView.self)
}
extension Alignment {
static let centeredView = Alignment(horizontal: HorizontalAlignment.center,
vertical: VerticalAlignment.centeredMiddleView)
}
struct TestHeaderFooter: View {
var body: some View {
ZStack(alignment: .centeredView) {
Rectangle().fill(Color.clear) // !! Extends ZStack to full screen
VStack {
Header()
Text("I'm on center")
.alignmentGuide(.centeredMiddleView) {
$0[VerticalAlignment.center]
}
Footer()
}
}
// .edgesIgnoringSafeArea(.top) // uncomment if needed
}
}
struct Header: View {
var body: some View {
Rectangle()
.fill(Color.blue)
.frame(height: 40)
}
}
struct Footer: View {
var body: some View {
Rectangle()
.fill(Color.green)
.frame(height: 200)
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
TestHeaderFooter()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |