iOS 7.0之后tableview多了一個屬性:UITableViewAutomaticDimension,此后利用xib創建的cell,用來實現tableviewcell自適應行高就變得簡單高效許多。只是有一個前提:cell是用xib方式自定義創建,Autolayout做的約束。
先上效果圖
效果圖
利用xib創建自定義cell實現自適應行高,你需要確定cell中哪些控件是可變高度來影響行高的,本例中標題和底部線條是固定高度的,而描述的內容的標簽控件是要根據服務器返回的數據進行動態改變從而影響cell行高的。固定高度的控件只需要設置相對上下控件(緊鄰的上下控件)的約束即可,而可變高度的控件并不能設定高度。cell內部每一個控件都必須要設置相對上下的控件,哪怕少設置了一個控件的約束,都不能達到效果,設置約束的時候可以從上住下逐個設置約束,避免遺漏
本例中cell內部控件約束示意圖
標題的約束
描述內容的約束
線條的約束
本例中描述內容的控件是標簽,需要設置 numberOfLines = 0,同時也要設置寬度,確保標簽內容過長可以自動換行。
設置完cell的約束,只需在對應的控制器里加兩行代碼即可實現tableview自適應行高。這兩行代碼既可以在viewDidLoad里寫,也可以寫在初始化tableview的方法中。
//設置預估行高
_sellingPointTB.estimatedRowHeight = 100.0f;
_sellingPointTB.rowHeight = UITableViewAutomaticDimension;
最后運行出來就是第一張圖片展現出來的效果圖。
其實寫到最后回頭想想本文中提到的一個前提:cell是用xib方式自定義創建,Autolayout做的約束。 可以看到用xib創建的cell內控件的約束,都是相對于上下緊鄰控件設置的約束。如果使用純代碼創建cell,使用Masonry設置約束亦是如此,所以,這個方法也同樣適用于純代碼創建的cell。