【问题标题】:Issues setting height in SwiftUI View在 SwiftUI 视图中设置高度的问题
【发布时间】:2020-09-11 07:42:19
【问题描述】:

我已经实现了下面的设计,但是我发现了一个似乎微不足道的错误来找出解决方案。下面的代码可以绘制视图并能够正确显示数据,只有当我在本地获取数据时,而不是当我通过网络获取数据时。视图不会绘制卡片我必须单击另一个选项卡并返回带有卡片的视图。我试图找出问题可能是什么,并且我能够找出这个代码是源代码.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)
    }
}

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    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 !!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2014-06-12
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多