我创建了一个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,似乎最后一次约束更新没有生效:
我想我并不完全了解布局更新过程,所以我无法弄清楚原因以及如何解决它,我需要一些帮助,谢谢!