SwiftUI 在 ScrollView 上设置最大高度

问题描述

我已经基于这个 link 构建了一个 Chips Container。基本上只是一个按行订购芯片的容器。这是我的代码

struct ChipsContent: View {
    @Observedobject var viewmodel = Chipsviewmodel()
    @State private var totalHeight
              = CGFloat.zero
    
    var body: some View {
        var width = CGFloat.zero
        var height = CGFloat.zero
        return ScrollView {
            GeometryReader { geo in
                    ZStack(alignment: .topLeading,content: {
                    ForEach(viewmodel.dataObject) { chipsData in
                        Chips(systemImage: chipsData.systemImage,titleKey: chipsData.titleKey,isSelected: chipsData.isSelected)
                            .padding(.all,5)
                            .alignmentGuide(.leading) { dimension in
                                if (abs(width - dimension.width) > geo.size.width) {
                                    width = 0
                                    height -= dimension.height
                                }
                                
                                let result = width
                                if chipsData.id == viewmodel.dataObject.last!.id {
                                    width = 0
                                } else {
                                    width -= dimension.width
                                }
                                return result
                              }
                            .alignmentGuide(.top) { dimension in
                                let result = height
                                if chipsData.id == viewmodel.dataObject.last!.id {
                                    height = 0
                                }
                                return result
                            }
                    }
                    }).background(viewHeightReader($totalHeight))
            }.padding(.all,5)
        }.frame(height: height)
    }
    
    private func viewHeightReader(_ binding: Binding<CGFloat>) -> some View {
            return GeometryReader { geometry -> Color in
                let rect = geometry.frame(in: .local)
                dispatchQueue.main.async {
                    binding.wrappedValue = rect.size.height
                }
                return .clear
            }
        }
}

使用此代码,容器根据其内容获取高度。我想为 Scroll 视图设置一个最大高度,如果内容大于这个最大高度,则内容应该是可滚动的。可以这样做吗?

解决方法

使用 .frame(minHeight: ...,maxHeight: ...)

通过设置最小和最大高度,您限制了 SwiftUI 决定大小的自由,因此与仅提及 .frame(height:...) 相比,您有更多的控制权,这被视为建议但不是必须处理的值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...