在ScrollView中调整了UITableView,内容视图未调整大小

时间:2018-03-06 09:19:17

标签: ios swift xcode uitableview uiscrollview

我正在开发一个用户可以创建游戏列表的应用程序,我已经设法创建了一个场景,用户可以在其中查看列表的详细信息(标题和说明),并获得在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未调整大小并保持不变。以编程方式调整大小没有任何作用,因为它只保留原始大小

1 个答案:

答案 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()

    }

希望这有帮助!