在最開始開發的時候,大家都知道UITableView有一個獲取cell高度的代理方法,可以從這個方法當中設置Cell的高度,即:
那么自然而然的就可以想到這種辦法來設置高度:定義一個全局的Cell,在圖2的方法上給cell賦值,讓評論的Label執行sizeToFit,重新計算Cell的高度,然后返回Cell的高度。
但是這種方法不建議使用,它存在幾個缺點:
1.效率不高,給cell賦了2次值。
2.如果cell是不固定的,那么更改起來比較繁瑣。
3.邏輯有點混亂。
那么有沒有一種簡單有效並且十分優雅的方式來實現Cell的自適應高度呢?當然有。
步驟一:設置tableview的高度為自動填充高度模式
UITableView *table=[[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain];
table.rowHeight=UITableViewAutomaticDimension;
解釋:如此設置之后,就不用寫cell高度的代理方法來設置高度了。(注:默認值就是UITableViewAutomaticDimension)。
步驟二:設置table.estimatedRowHeight = 100。
解釋:設置一個預估的行高,為了代碼的易讀性,還是盡量要設置一個跟cell的高差不多的值。
做了上面的步驟之后,剩下的就是繪制Cell了,這里就涉及到一個思想:根據內容自動撐開。
步驟三:
步驟四:
解釋:根據步驟三和步驟四的代碼,作出下面注釋:UITableViewCell上有一個contentView,contentView上面放置了所有的控件。而這里的最頂部的控件avatarButton(頭像按鈕)頭部頂着contentView的頭部,contentLabel(評論label)頭部頂着avatarButton(頭像按鈕)的底部,同時contentLabel(評論label)底部有頂着contentView的底部,為此就實現了avatarButton與contentLabel共同將contentView給撐開了,也就把cell給撐開了。
那么會有人問:那contentLabel的高度怎么出來?其實從圖4可以看到我根本是沒有設置contentLabel的height,原因就是contentLabel的text就決定了contentLabel的高度,內容的多少會自動將contentLabel的高度撐開。
這就是上面提到的根據內容自動撐開的思想。