更新其高度约束后,UITableView的外观没有改变

时间:2016-10-08 11:29:59

标签: ios uitableview autolayout

我创建了一个QMUITableView,它是UITableView的子类。我想让QMUITableView的高度等于其contentSize.height的高度,这样就不需要滚动TableView了。

我在QMUITableView中做了什么:

required init?(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)

    self.rowHeight = UITableViewAutomaticDimension
    self.estimatedRowHeight = 50

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

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {

    self.viewCH.constant = self.contentSize.height
    print("\(viewCH.constant) \(self.contentSize.height)")
    self.layoutIfNeeded()

}

属性ViewCH连接到tableView的高度约束。打印结果如下:

viewCH: 100.0 contentSize.height: 100.0
viewCH: 100.0 contentSize.height: 100.0
viewCH: 100.0 contentSize.height: 100.0
viewCH: 112.5 contentSize.height: 112.5
viewCH: 125.0 contentSize.height: 125.0
viewCH: 100.0 contentSize.height: 100.0
viewCH: 112.5 contentSize.height: 112.5
viewCH: 125.0 contentSize.height: 125.0
viewCH: 100.0 contentSize.height: 100.0
viewCH: 133.0 contentSize.height: 133.0
viewCH: 166.0 contentSize.height: 166.0

我将行数设置为2。我们可以看到max contentSize.height是166并且viewCH属性总是正确设置。但是,我观察到设备上显示的实际高度是133,似乎最后一次约束更新没有生效:

enter image description here

我想我并不完全了解布局更新过程,所以我无法弄清楚原因以及如何解决它,我需要一些帮助,谢谢!

0 个答案:

没有答案