在滚动视图中调整了 UITableView 的大小,内容视图未调整大小



我正在开发一个用户可以创建游戏列表的应用程序,我已经设法创建了用户可以查看列表详细信息(标题和描述)的场景,并获得UITableView中添加的游戏的概述。

当用户将游戏添加到 tableView 时,我会调整表格大小和 scrollView 内容大小,以便使用 ScrollView 轻松显示所有游戏。问题在于 didSelectRowAt 函数仅由前两个单元格调用!!我不明白为什么它对其余细胞不起作用。

调整大小的代码:

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if gamesInList.count > 0  && gamesInList.count != previourCount {
previourCount = gamesInList.count
gamesTableView.isHidden = false
gamesInListTitle.isHidden = false
listEditButton.isHidden = false
// MARK: Resize views for the table view
let oldTableSize = gamesTableView.frame.size.height
print(gamesTableView.estimatedRowHeight)
// Resi
gamesTableView.frame = CGRect(x: gamesTableView.frame.origin.x, y: gamesTableView.frame.origin.y, width: gamesTableView.frame.size.width, height: CGFloat(gamesInList.count) * gamesTableView.estimatedRowHeight) // TODO Ond variabel!
scrollView.contentSize = CGSize(width: contentView.frame.size.width, height: scrollView.contentSize.height - oldTableSize + gamesTableView.frame.height)
gamesTableView.reloadData()
}
}

我认为这与 scrollView 内的内容视图没有调整大小有关,所以我也尝试用代码调整它的大小,但它无论如何都不起作用。

更新

所以我一直在调试我的问题一段时间,我想我已经找到了真正的问题。 滚动视图内容大小调整正确,但内容视图未调整大小并保持相同。以编程方式调整其大小不会执行任何操作,因为它只是保持原始大小

因此,经过大约 5 个小时的搜索和测试,我终于设法解决了这个奇怪的问题,即自动布局。

第一步是修复滚动视图和内容视图的约束,使其随内容动态展开

第二步也是最难修复的步骤是实际设法强制内容视图使用新的滚动视图内容大小进行扩展。 但是看着这篇文章,我找到了解决问题的方法。 不确定这是否有点黑客,但你给 UITableView 一个高度约束(高),你可以将其拖到你的代码中,然后更改该约束,这将强制自动布局执行你的出价。

完成的代码:

if gamesInList.count > 0  && gamesInList.count != previousCount {
previousCount = gamesInList.count
gamesTableView.isHidden = false
gamesInListTitle.isHidden = false
listEditButton.isHidden = false
// MARK: Resize views for the table view
let oldTableSize = gamesTableView.frame.size.height
self.gamesTableView.frame.size = CGSize(width: gamesTableView.frame.size.width, height: CGFloat(gamesInList.count) * gamesTableView.estimatedRowHeight)
scrollView.frame.size = CGSize(width: scrollView.frame.size.width, height: scrollView.contentSize.height - oldTableSize + gamesTableView.frame.height)
tableViewContraint.constant = scrollView.contentSize.height
gamesTableView.reloadData()
}

希望这有帮助!

最新更新