获取Swift中表格内容的高度

Aus*_*n E 10 xcode uitableview ios swift

我正在尝试获取所有表的内容的高度,以便我可以更新它所在的容器.这将允许滚动视图中的容器和其他视图一起滚动.

Cod*_*der 30

斯威夫特:

var tableViewHeight: CGFloat {
    tableView.layoutIfNeeded()

    return tableView.contentSize.height
}
Run Code Online (Sandbox Code Playgroud)

Objective-C的

- (CGFloat)tableViewHeight {
    [tableView layoutIfNeeded];

    return [tableView contentSize].height;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为基于tableview内容高度设置高度不是好方法,因为它取决于你何时获得表内容高度...如果你在重新加载表后立即调用这个方法,那么你可能会得到错误的内容大小 (3认同)

ram*_*880 15

斯威夫特3

override func viewDidLoad() {
    super.viewDidLoad()

    myTbleView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
}

override func viewWillDisappear(_ animated: Bool) {
    myTbleView.removeObserver(self, forKeyPath: "contentSize")
    super.viewWillDisappear(true)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if(keyPath == "contentSize"){
        if let newvalue = change?[.newKey]
        {
            let newsize  = newvalue as! CGSize
           tableViewHeightConstraint.constant = newsize.height
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这会帮助你.

  • 这段代码工作起来就像一个魅力,但我有一个问题,我在同一个视图控制器中有两个表视图,然后这段代码为两个表视图设置了相同的高度。那么有没有其他方法可以单独获取tableview的高度。 (2认同)