【发布时间】:2021-10-31 19:43:00
【问题描述】:
我正在尝试将List 放入ScrollView。
如果你想知道为什么,这里是我的解释,如果不是 - 直接跳到代码片段。我需要在我的List 顶部有一个平滑缩放的标题。为了做到这一点,我应该将标题和List 都放在ScrollView 上,然后使用滚动内容偏移量来完成其余的工作。我还需要禁止List 的内置滚动,因为它已经在ScrollView 上,并修复List 的高度——这样滚动视图就知道它的内容高度。它工作得很好,但List 的高度有时(!)是错误的。
我不能使用LazyVStack 代替List - 它更慢(我猜没有单元重用),而且List 很大。它还破坏了NavigationLinks,所以它被淘汰了——它必须是List。
单元格的高度不固定,无法手动计算。
这是我使用UITableView创建具有固定高度的不可滚动List的代码:
struct AutosizingList<Content: View>: View {
@ViewBuilder var content: Content
@State private var tableContentHeight: CGFloat = 0
var body: some View {
List {
content
}
.introspectTableView { tableView in
tableView.isScrollEnabled = false
tableContentHeight = tableView.contentSize.height
}
.frame(height: tableContentHeight)
}
}
我猜这个块并不总是在didLayoutSubviews 或其他东西之后调用,这就是为什么高度有时正确有时错误的原因。所以这是我的问题:我如何可靠地获得List 的高度?我可以在 SwiftUI 中使用类似于 didLayoutSubviews 的远程东西吗?
【问题讨论】:
-
你能创建一个minimal reproducible example吗?
标签: ios swift uitableview swiftui scrollview