我正在开发一个用户可以创建游戏列表的应用程序,我已经设法创建了一个场景,用户可以在其中查看列表的详细信息(标题和说明),并获得在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中的内容视图有关,没有调整大小,所以我试图用代码调整它的大小,但它无论如何都没有用。
更新
所以我一直在调试我的问题,我想我已经找到了真正的问题。 scrollView contentSize已正确调整大小,但contentView未调整大小并保持不变。以编程方式调整大小没有任何作用,因为它只保留原始大小
答案 0 :(得分:0)
所以经过大约5个小时的搜索和测试,我终于设法解决了这个奇怪的问题,即autolayout。
第一步是修复滚动视图和内容视图的约束,使其随内容动态扩展
第二个也是最难修复的步骤是实际设法强制使用新的scrollView contentSize扩展contentView。 但是看着这个post我找到了解决问题的方法。 不确定这是否有点像黑客,但你给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()
}
希望这有帮助!