在SwiftUI视图中发布设置高度问题

时间:2020-05-24 16:57:05

标签: ios swift swiftui

我已经实现了下面的设计,但是我发现了一个似乎很难解决该问题的错误。下面的代码仅当我在本地获取数据时才能绘制视图并能够正确显示数据,而当我通过网络获取数据时则不能。该视图不会绘制卡,我必须单击另一个选项卡并使用该卡返回视图。我试图弄清楚问题可能是什么,然后我找到了源代码.frame(minHeight: 0, maxHeight: .infinity)的代码,它确定了高度。如果我删除此行,则可以看到卡,但高度会增加。我试图将高度更改为静态值,但是没有用。感谢您的帮助。

查看一个

ScrollView(.horizontal, showsIndicators: false){
    HStack(spacing: 20){
        ForEach(someIterator) { someViewModel in
            CardView(myViewModel: someViewModel)
        }
    }.padding([.leading,.bottom,.trailing])
}
.frame(height: 420)

查看两个

struct CardView: View {
    @ObservedObject var myViewModel: MyViewModel
    var body: some View {
        VStack(){
            HStack(){
                Text(myViewModel.mymodel.value)
                Text("Some text")
            }
            Text(myViewModel.mymodel.description)

        }
        .frame(minWidth: 0 , maxWidth: 327, maxHeight: 380)
        .frame(minHeight: 0 , maxHeight: .infinity) // The issue
        .background(Color("Blue"))
        .cornerRadius(10)
    }
}

Data

1 个答案:

答案 0 :(得分:0)

ScrollView需要提前了解内容大小,这就是为什么您会注意到从网络获取数据的问题,因为在这种情况下,滚动视图中没有初始内容并且被压缩了

这是一个解决方案,已在Xcode 11.4 / iOS 13.4上使用复制代码进行了测试

ScrollView(.horizontal, showsIndicators: false){
    HStack(spacing: 20){
        ForEach(someIterator) { someViewModel in
            CardView(myViewModel: someViewModel)
        }
    }.padding([.leading,.bottom,.trailing])
    .frame(height: 420)                      // << move inside !!
}