【问题标题】:Dynamic height SwiftUI UIViewControllerRepresentable动态高度 SwiftUI UIViewControllerRepresentable
【发布时间】:2020-10-28 10:13:37
【问题描述】:

我的 SwiftUI 项目中有一个 UITableViewController。 UITableView 中的单元格数量可以不同。 1 cellHeight 是 60。如果我没有在 Section 上设置 .frame(height ),它将几乎不会显示一个完整的单元格。但由于我不知道会有多少行,我无法设置.frame(height)。并且设置minHeight/maxHeight 将始终使用maxHeight...

有没有办法根据单元格的数量来计算高度,或者我可以通过其他方式使TableView() 框架动态化?

var body: some View {
        NavigationView {
            Form {
                Section(header: Text("My UIKit Table View")) { TableView() }
                Section(header: Text("My SwiftUI View")) { ContentView() }
            }
        }
    }

【问题讨论】:

    标签: swift uitableview swiftui


    【解决方案1】:

    您可以在Form{} 上使用.environment(\.defaultMinListRowHeight, CGFloat),然后根据Itemcount 计算高度。

    例子:

    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("My UIKit Table View")) { TableView() }
                Section(header: Text("My SwiftUI View")) { ContentView() }
            }
            .environment(\.defaultMinListRowHeight, 40)
            .frame(height: (50 * TableViewCount) + (50 * ContentViewCount)) + 50 * SectionHeaderCount)
        }
    }
    

    这必须进一步定制。在我的示例中,listRowHeight 为 40,但我使用 50 计算高度,因此可以正确计算分频器和一些间距。 此外,我为 Sections 的标题空间添加了 50。

    这是一种 hacky 解决方案(就像 SwiftUI 中的许多解决方案一样),但一旦正确设置,它的效果就出奇的好。

    【讨论】: