我正在尝试获取 SwiftUI 列表内容的高度。 我正在使用推荐用于滚动视图的以下内容,但它不起作用:
.background(
GeometryReader { proxy in
Color.clear.onAppear {
print(proxy.size.height)
}
}
)
这最终给了我可见列表的高度,并且无论列表内容如何,它总是相同的。
有没有办法获取List的内容大小?
可以使用 SwiftUIViewInspector 开源框架,您可以将其添加为 Swift 包,然后添加到构建阶段、目标和链接阶段。那么它就是这样的:
import Inspect
...
@State var listHeight: CGFloat = 100 // just any default height
...
List {
...
}
.frame(height: listHeight)
.inspect { list in
switch list {
case .collectionView(let collectionView):
self.listHeight = collectionView.contentSize.height
case .tableView((let tableView)):
self.listHeight = tableView.contentSize.height
}
}
首先,列表以默认高度显示,它在内部计算可滚动大小,其中包括所有标题和行,并将其存储在其
contentSize
属性中。因此,我们只需将 listHeight
状态设置为此值,然后调整列表大小以显示所有内容。
这带有明显的警告,仅将其用于小表,因为本质上它会禁用行重用。或者如果它正在进行一些离屏优化,则可能不会。