如何获取 SwiftUI 列表内容的高度?

问题描述 投票:0回答:1

我正在尝试获取 SwiftUI 列表内容的高度。 我正在使用推荐用于滚动视图的以下内容,但它不起作用:

.background(
    GeometryReader { proxy in
        Color.clear.onAppear {
            print(proxy.size.height)
        }
    }
)

这最终给了我可见列表的高度,并且无论列表内容如何,它总是相同的。

有没有办法获取List的内容大小?

ios xcode swiftui swiftui-list
1个回答
0
投票

可以使用 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
状态设置为此值,然后调整列表大小以显示所有内容。

这带有明显的警告,仅将其用于小表,因为本质上它会禁用行重用。或者如果它正在进行一些离屏优化,则可能不会。

© www.soinside.com 2019 - 2024. All rights reserved.