iOS 7.0之后tableview多了一個(gè)屬性:UITableViewAutomaticDimension琐凭,此后利用xib創(chuàng)建的cell相种,用來實(shí)現(xiàn)tableviewcell自適應(yīng)行高就變得簡單高效許多辉浦。只是有一個(gè)前提:cell是用xib方式自定義創(chuàng)建碳却,Autolayout做的約束炭玫。
先上效果圖
利用xib創(chuàng)建自定義cell實(shí)現(xiàn)自適應(yīng)行高脑又,你需要確定cell中哪些控件是可變高度來影響行高的,本例中標(biāo)題和底部線條是固定高度的泞边,而描述的內(nèi)容的標(biāo)簽控件是要根據(jù)服務(wù)器返回的數(shù)據(jù)進(jìn)行動(dòng)態(tài)改變從而影響cell行高的该押。固定高度的控件只需要設(shè)置相對上下控件(緊鄰的上下控件)的約束即可,而可變高度的控件并不能設(shè)定高度阵谚。cell內(nèi)部每一個(gè)控件都必須要設(shè)置相對上下的控件蚕礼,哪怕少設(shè)置了一個(gè)控件的約束,都不能達(dá)到效果梢什,設(shè)置約束的時(shí)候可以從上住下逐個(gè)設(shè)置約束奠蹬,避免遺漏
本例中cell內(nèi)部控件約束示意圖
本例中描述內(nèi)容的控件是標(biāo)簽,需要設(shè)置 numberOfLines = 0嗡午,同時(shí)也要設(shè)置寬度囤躁,確保標(biāo)簽內(nèi)容過長可以自動(dòng)換行。
設(shè)置完cell的約束荔睹,只需在對應(yīng)的控制器里加兩行代碼即可實(shí)現(xiàn)tableview自適應(yīng)行高狸演。這兩行代碼既可以在viewDidLoad里寫,也可以寫在初始化tableview的方法中僻他。
//設(shè)置預(yù)估行高
_sellingPointTB.estimatedRowHeight = 100.0f;
_sellingPointTB.rowHeight = UITableViewAutomaticDimension;
最后運(yùn)行出來就是第一張圖片展現(xiàn)出來的效果圖宵距。
其實(shí)寫到最后回頭想想本文中提到的一個(gè)前提:cell是用xib方式自定義創(chuàng)建,Autolayout做的約束吨拗。 可以看到用xib創(chuàng)建的cell內(nèi)控件的約束满哪,都是相對于上下緊鄰控件設(shè)置的約束。如果使用純代碼創(chuàng)建cell劝篷,使用Masonry設(shè)置約束亦是如此哨鸭,所以,這個(gè)方法也同樣適用于純代碼創(chuàng)建的cell携龟。