插入/删除单元格后的可扩展UITableView高度

时间:2019-06-08 20:43:36

标签: swift uitableview

我有stackview。我试图插入一个TableView作为其安排的子视图之一。我希望我的tableview高度在其子单元格数量的函数中是自动的。经过大量研究,尤其是在StackOverflow中的答案之后,我发现当表视图布局子视图时,必须“取消验证”表视图的“ intrinsicContentSize”。虽然,这仍然行不通:

这是我的tableview类:

class TableView : UITableView {

    override var intrinsicContentSize: CGSize {
        get {
            (BP1) return CGSize(width: CGFloat.greatestFiniteMagnitude, height: contentSize.height)
        }
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        //(***)
        (BP2) invalidateIntrinsicContentSize()

    }
}

但是,问题是当我运行应用程序时,tableView的高度为44 * numberOfRow(44似乎是UITableView的默认高度)。不考虑contentSize.height。

我试图在(BP)处放置断点(在上面的代码上):在2个函数中出现几次之后,程序最终转到(BP1),在这里具有正确的contentSize.height,将其设置为internalContentSize ,然后转到layoutSubview(BreakPoint 2)。

问题在于,此刻,即使internalContentSize正位于layoutSubview的入口处,我的tableview.frame.height仍为BP2的44 * numberrow(在super.layoutSubviews()之后)< / strong>。我只是在super.layoutSubviews()考虑到刚设置为正确值的新internalContentSize,并随后将tableView.frame.height更新为该值。

最后,我要做的是将该行放在(***):

frame = CGRect(x:frame.origin.x, y: frame.origin.y, width:10000, height: contentSize.height)

使用此功能,它将帧更新为正确的值。尽管我不明白为什么在super.layoutSubviews()的自动布局过程中未考虑正确的内在contentSize。

0 个答案:

没有答案