在最開始開發的時候,你們都知道UITableView有一個獲取cell高度的代理方法,能夠從這個方法當中設置Cell的高度,即:spa
那麼天然而然的就能夠想到這種辦法來設置高度:定義一個全局的Cell,在圖2的方法上給cell賦值,讓評論的Label執行sizeToFit,從新計算Cell的高度,而後返回Cell的高度。代理
可是這種方法不建議使用,它存在幾個缺點:blog
1.效率不高,給cell賦了2次值。開發
2.若是cell是不固定的,那麼更改起來比較繁瑣。it
3.邏輯有點混亂。io
那麼有沒有一種簡單有效而且十分優雅的方式來實現Cell的自適應高度呢?固然有。table
步驟一:設置tableview的高度爲自動填充高度模式class
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的高度撐開。
這就是上面提到的根據內容自動撐開的思想。