动态高度SwiftUI UIViewControllerRepresentable

时间:2020-10-28 10:13:37

标签: swift uitableview swiftui

我的SwiftUI项目中有一个UITableViewController。 UITableView中的单元格数量可以不同。 1 cellHeight是60。如果我没有在.frame(height )上设置Section,它将几乎不会显示一个完整的单元格。但是由于我不知道会有多少行,所以无法设置.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() }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以在 .environment(\.defaultMinListRowHeight, CGFloat) 上使用 Form{},然后根据 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。

这有点像 SwiftUI 中的解决方案(就像 SwiftUI 中的许多解决方案一样),但是一旦正确设置,它就会运行得非常好。