UITableViewCell根據內容顯示不同的高度問題

1.iOS8及以后,通過XIb自定義不等高cell: ? ? ? ?下載

// 告訴tableView所有cell的真實高度是自動計算(根據設置的約束來計算)self.tableView.rowHeight = UITableViewAutomaticDimension;

// 告訴tableView所有cell的估算高度

self.tableView.estimatedRowHeight = 44;

注意一點的是在Xib中設置自動換行Lable的時候要設置lable和cell底部的約束如圖:

運行效果如下:

2.(估計現在都沒人用了簡單介紹一下)如果要支持iOS7及之前如果cell內部有自動換行的label,需要設置preferredMaxLayoutWidth屬性

1.如果cell內部有自動換行的label,需要設置preferredMaxLayoutWidth屬性

- (void)awakeFromNib

{// 手動設置文字的最大寬度(為了讓label知道自己文字的最大寬度,進而能夠計算出自己的frame)

self.titleLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;

}

2.還要在tableView的設置cell估算高度

// 告訴tableView所有cell的估算高度(設置了估算高度,就可以減少tableView:heightForRowAtIndexPath:方法的調用次數)

self.tableView.estimatedRowHeight = 80;

3.在代理方法中計算cell的高度

DemoCell *cell;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

{

// 創建一個臨時的cell(cell的作用:根據模型數據布局所有的子控件,進而計算出cell的高度)

if (!cell) {

cell = [tableView dequeueReusableCellWithIdentifier:ID];

}

// 設置模型數據

...

return cell.height;

}

// heightForRowAtIndexPath中調用的返回cell高度的方法

- (CGFloat)height

{

// 強制布局cell內部的所有子控件(label根據文字多少計算出自己最真實的尺寸)

[self layoutIfNeeded];

// 計算cell的高度

if (...) {

return ...;

} else {

return ...;

}

}

3.通用規則代碼設置

設置思路如下:

所有涉及基于純代碼原則

1.建立Modle模型

2.根據Modle模型建立framModle模型并計算出控件的Fram

3.在cell中設置子控件并設置Fram

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

if (self) {

//設置子控件

[self setupchildrenView];

}

return self;

}


- (void)setFramModle:(myFootPrintFramModle *)framModle{

_framModle=framModle;

myFootPrintDataModle *dataModle=framModle.modle;

//設置控件的Fram和數據

}

4.在代理方法設置返回的行高

- (CGFloat )tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

myFootPrintDataSectionModle *Modle=self.dataArray[indexPath.section];

myFootPrintFramModle *framMod=Modle.dataArray[indexPath.row];

return framMod.cellHeight;

}

簡述一下方法一和方法三的優缺點:

方法一:對于一些比較簡單的界面,如上圖,Xib拖控件兩句話就可以搞定很方便。缺點就是比如下面的界面就不好控制了:

實現根據數據的不同,排列圖片,以及對下面轉發,評論,點贊工具條的設計,這個很明顯把圖片和工具條單獨的功能繁多我們需要分開來寫,這樣就需要代碼進行實現了(這個只是本人的思路),具體根據開發遇到的問題決定

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容