在 ZStack 中使用 GeometryReader,如果指定了转换,我会看到内容顶部对齐,但如果没有指定转换,则内容居中。这是 SwiftUI 中的错误,还是我遗漏了什么? (在这个简单的例子中,我意识到永远不会发生实际的转换,但我在一个可能发生转换的更复杂的场景中遇到了这个问题。)
这是代码:
public struct ContentView: View {
public var body: some View {
ZStack(alignment: .center) {
GeometryReader { proxy in
Text("Foo bar baz foo bar baz foo bar baz")
.animation(.default)
.transition(.opacity) // Without this line, the text is centered.
}
}
}
}
没有
.transition(.opacity)
行,布局为:与
.transition(.opacity)
行,布局为:最佳答案
GeometryReader
是我们负责布局的容器,它的默认行为对于不同的 View 可能是不可预测的。如果您想要可预测的行为,您应该指定一些明确的容器,如下所示:
变体 1:
ZStack(alignment: .center) {
GeometryReader { proxy in
VStack {
Text("Foo bar baz foo bar baz foo bar baz")
.animation(.default)
.transition(.opacity)
}
}
}
变体 2:
GeometryReader { proxy in
ZStack(alignment: .center) {
Text("Foo bar baz foo bar baz foo bar baz")
.animation(.default)
.transition(.opacity)
}
}
我更喜欢变体 2
关于ios - SwiftUI:.transition 将 ZStack 中的对齐方式从中心更改为顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60368800/