之前寫過(guò)一篇它的文章了。不過(guò)那個(gè)是單純的demo,這次有個(gè)頁(yè)面又要高度自適應(yīng),就重新看了看,再次用它實(shí)現(xiàn)高度自適應(yīng)。第三方的庫(kù)就不用了。
首先,cell高度的不一樣,都是由cell中l(wèi)abel文字的不確定造成的,才產(chǎn)生了cell高度自適應(yīng)這個(gè)問題。因此,label是關(guān)鍵。
以前解決cell高度問題,是根據(jù)label內(nèi)容先計(jì)算label,然后再加上其他的固定高度,返回給代理方法,或者首先計(jì)算完所有高度,放到一個(gè)數(shù)組里,然后直接返回,總共計(jì)算一次就行了。不用沒返回一次計(jì)算一次。這種辦法沒啥大問題。不過(guò)既然系統(tǒng)給了cell高度的計(jì)算辦法,肯定比自己主動(dòng)計(jì)算效率高。
這個(gè)方法就是systemLayoutSizeFittingSize。
注意:systemLayoutSizeFittingSize這個(gè)方法是cell.contentView調(diào)動(dòng),返回的contentView的size,所以最后+1,分割線的高度。
并且必須有實(shí)例對(duì)象調(diào)用,所以做一個(gè)全局變量self.temCell,不用每次調(diào)用都新建cell對(duì)象。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// 模擬的數(shù)據(jù)
if (indexPath.row % 2) {
self.temCell.contentLab.text = @"我們睡覺族自然也沒閑著,每天早晨從中午開始,當(dāng)一天和尚撞一天鐘或者干脆連鐘都不撞。上廁所、吃飯,看NBA、打籃球,上網(wǎng)、約會(huì);各有各的一份事做。天天如此,日子也就在這些單調(diào)無(wú)聊的事情中被消耗。回過(guò)頭來(lái)看看強(qiáng)哥,那才真叫一個(gè)收獲滿滿。拿到了國(guó)家英語(yǔ)四六級(jí)證書,計(jì)算機(jī)二級(jí)證書,普通話一級(jí)乙等證書等各類證書,國(guó)家獎(jiǎng)學(xué)金,以及保送研究生的資格。";
}else{
self.temCell.contentLab.text = @"除了這些能看得到的收獲,強(qiáng)哥還有一件更牛逼的本領(lǐng),那就是精通計(jì)算機(jī)。組裝,修理,裝系統(tǒng),制作表格,處理照片,以及各類軟件,均不在話下。因此,他想找份工作,易如反掌因此";
}
// 先確定label的最大寬度,根據(jù)自己需求確定寬度
CGFloat preMaxWaith = SCREENWIDTH - 96;
[self.temCell.contentLab setPreferredMaxLayoutWidth:preMaxWaith];
// 直接返回cellsize,最后+1,是cell分割線的高度
CGSize cellSize = [self.temCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return cellSize.height + 1;
}
效果如圖

結(jié)果.png
PS: 多個(gè)label的情況,有空接著試試。