如何解决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:...) 相比,您有更多的控制权,这被视为建议但不是必须处理的值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。