systemLayoutSizeFittingSize 高度自適應(yīng)

之前寫過(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的情況,有空接著試試。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容