SwiftUI 因"precondition failure: attribute failed to set an initial value: 85"而崩溃



我尝试构建一个具有不同横向和纵向布局的视图。

我是这样做的:

class ViewModel : ObservableObject
{
@Published var name  = "Name"
}
struct ContentView: View {
var body: some View {
NavigationView{
List{
NavigationLink(destination: TEST(vm: ViewModel() ) ){Text ("TEST")}
}
}
}
}
struct TEST: View {
@ObservedObject var vm : ViewModel
var body: some View {
GeometryReader{ geometry in
if  geometry.size.height > geometry.size.width {
TEST_Vertical(vm: self.vm)
} else {
TEST_Horicontal(vm: self.vm)
}
}
}
}
struct TEST_Horicontal: View {
@ObservedObject var vm : ViewModel
var body: some View {
HStack{
Text("left (vm.name)")
Spacer()
Text("right")
}
}
}
struct TEST_Vertical: View {
@ObservedObject var vm : ViewModel
var body: some View {
VStack{
Text("top")
Text("(vm.name)")
Spacer()
Text("bottom")
}
}
}

不幸的是,该应用程序在单击导航链接时崩溃。

我做错了什么,或者这是一个已知的错误?

发生崩溃是因为在过渡开始时NavigationLinkGeometryReader返回CGSize.zero并在下一个更新阶段返回实际大小,因此体内视图会即时更改,这是意料之外的。可能这是一个错误。

您可以考虑以下解决方法(或类似方法,例如有条件地使用.hidden()(。使用 Xcode 11.4/iOS 13.4 进行测试(我不急于更新环境(。

struct TEST: View {
@ObservedObject var vm : ViewModel
var body: some View {
GeometryReader{ geometry in
ZStack {
TEST_Vertical(vm: self.vm)
.opacity(geometry.size.height >= geometry.size.width ? 1 : 0)
TEST_Horicontal(vm: self.vm)
.opacity(geometry.size.height < geometry.size.width ? 1 : 0)
}
}
}
}

相关内容

最新更新