ios - SwiftUI:.transition 将 ZStack 中的对齐方式从中心更改为顶部?

标签 ios swiftui

在 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)行,布局为:

enter image description here

.transition(.opacity)行,布局为:

enter image description here

最佳答案

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/

相关文章:

ios - Apple 支付与 Stripe 的集成(调试中的 STPTestPaymentAuthorizationViewController)

ios - 在 iOS 上解码 Base64 数据

ios - 警告 : "Modifying state during view update, this will cause undefined behavior." in UIViewRepresentable

SwiftUI 如何从所有 View 中查看类

ios - SwiftUI:是否可以从 .OnTapGesture 中触发 set PreferenceKey()?

xcode - SwiftUI - .scrollPosition 修饰符不更新绑定(bind)属性

javascript - 如何在 UIWebView 中从 Javascript 调用 Objective-C 方法?

ios - 如何在新的 iTunes Connect 中更改包 ID

ios - 如何在通过线程执行工作负载时为微调器设置动画

swiftui - SwiftUI 仅限 iOS 还是也可以用于其他 Apple 平台?