gpt4 book ai didi

SwiftUI 崩溃并显示 "precondition failure: attribute failed to set an initial value: 85"

转载 作者:行者123 更新时间:2023-12-04 04:06:48 26 4
gpt4 key购买 nike

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

我是这样做的:

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")
}
}
}

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

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

最佳答案

发生崩溃是因为在 NavigationLink 转换开始时 GeometryReader 返回 CGSize.zero 并且在下一个更新阶段实际大小,所以在体内 View 被即时更改,这不是预期的。可能这是一个错误。

您可能会考虑以下解决方法(或类似的方法,例如,有条件地使用 .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)
}
}
}
}

关于SwiftUI 崩溃并显示 "precondition failure: attribute failed to set an initial value: 85",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62347055/

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