如何使用SwiftUI视图结构体代替可扩展ViewController中的传统单元格和xib?
import UIKit
import SwiftUI
class MasterViewController: UITableViewController {
var detailViewController: DetailViewController? = nil
var objects = [Any]()
// MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
navigationItem.title = "Table View"
//...
}
// MARK: - Table View Methods
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return objects.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(MySwiftUIView())
// ...
return cell
}
} ...
字符串
这个问题很明显,因为UIHostedController SwiftUI视图不是一个表格单元格,但我如何像一个单元格一样使用它?
6条答案
按热度按时间pvcm50d11#
谢谢你在这里回答你自己的问题。你的解决方案帮助我做了一个通用的HostingTableViewCell类。如果有人像我一样在Google上找到这个问题,我会把它贴在这里。
字符串
在您的可扩展视图控制器中:
型
如果有人用的话,可能会把它变成一个包裹。
k3fezbri2#
对答案的幻灯片修改,以修复内存泄漏,因为他们只添加宿主控制器作为子控制器,但从不删除它。
字符串
tjvv9vkg3#
作为另一个回答者,我对这个问题提出了类似的解决方案,但我意识到,如果正确设置了约束并调用了
invalidateIntrinsicContentSize()
,就不需要使用layoutIfNeeded
强制布局传递。我写了关于这个深入的here的文章,但对我有用的UITableViewCell
子类是:字符串
您应该能够像常规表格单元格一样注册它,并在取消对单元格的访问后调用
set(rootView:controller:)
使其工作。9gm1akwq4#
我自己找到了一个答案。这个答案很古怪,但是要把一个单元格和一个托管的控制器作为它的内容视图。
字符串
nbysray55#
也许这已经不重要了,除非你的目标是iOS 13,但是当你开始出队可重用的单元格时,事情就会变得不稳定。
字符串
ve7v8dk26#
如果您使用的是iOS 16+,UIHostingConfiguration是一个简单的解决方案。您可以执行以下操作:
字符串