gpt4 book ai didi

swift - NavigationView + GeometryReader View 返回不正确的大小

转载 作者:行者123 更新时间:2023-12-05 06:54:00 27 4
gpt4 key购买 nike

对于:

struct ContentView: View {
var body: some View {
NavigationView {
GeometryReader { geometry -> Text in
print("geometry.size \(geometry.size)")
return Text("text")
}
}
}
}

输出:

geometry.size (0.0, 0.0)

geometry.size (428.0, 749.0)

对于:

struct ContentView: View {
var body: some View {
GeometryReader { geometry -> Text in
print("geometry.size \(geometry.size)")
return Text("text")
}
}
}

输出:

geometry.size (428.0, 749.0)

这是一个错误吗?是否有可能避免这种行为?

最佳答案

我不认为这是一个错误;任何 View 都有权在其生命周期内重新定位其 subview 。通常这种行为对您没有影响,因为 View 会随着几何形状的变化而自动更新。

但是,如果您需要在 geometry.size 更新为非零值时立即执行某些逻辑,您可以在 onChange(of:) block :

struct ContentView: View {
var body: some View {
NavigationView {
GeometryReader { geometry in
Text("text")
.onChange(of: geometry.size) { newSize in
if newSize != .zero { /* do something with newSize */ }
}
}
}
}
}

我在另一个 stackoverflow article 中详细讨论了这种行为以及解决它的方法

关于swift - NavigationView + GeometryReader View 返回不正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65659318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com