我对 SwiftUI 还不熟悉,想了解如何让一个视图在设备屏幕上水平居中,同时将另一个视图锚定到其后边缘(而不使原始视图不居中)。
我有一个可以运行的原型,但它有点丑,并且依赖于“onGeometryChange”来跟踪居中视图的大小,以便将相邻视图偏移正确的量。它之所以有效,是因为使用偏移量不会改变包含它的 ZStack 的几何形状,因为它认为相邻视图与第一个视图占据相同的居中位置。
虽然我的方法似乎有效,但它似乎有点问题,因为它依赖于多个布局周期(一个用于布局 ZStack 和居中视图,然后读取几何变化,然后更新相邻视图的位置)。此外,ZStack 容器的尺寸不包含相邻视图的偏移量。
struct ContentView: View {
@State private var centeredLabelWidth: CGFloat = .zero
@State private var offsetLabelWidth: CGFloat = .zero
var body: some View {
ZStack {
Text("Centered Label")
.border(Color.blue)
.padding(1)
.onGeometryChange(for: CGFloat.self) { $0.size.width } action: {
centeredLabelWidth = $0
}
Text("Adjacent Label")
.border(Color.red)
.padding(1)
.onGeometryChange(for: CGFloat.self) { $0.size.width } action: {
offsetLabelWidth = $0
}
.offset(x: centeredLabelWidth / 2 + offsetLabelWidth / 2)
}
}
}
非常感谢社区的任何见解!