iOS 非等高 Cell

將文本內(nèi)容設(shè)置為自動(dòng)換行

  • 設(shè)置了Label的左邊和上邊間距,將其位置定死。
  • Label的lines設(shè)置為0行才能正常執(zhí)行自動(dòng)換行功能( 我失敗的圖。。就不貼了
  • 限制Label的換行寬度
    • 我把換行寬度設(shè)置成了(屏幕寬度-20個(gè)像素)
    // 設(shè)置label每一行文字的最大寬度
    // 為了保證計(jì)算出來的數(shù)值 跟 真正顯示出來的效果 一致
    self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
  • 看,可以換行了。只是內(nèi)容超出了cell的高度,顯得十分難看。

設(shè)置自定義cell高度

  • 往模型中添加一個(gè)cellHeight 屬性,方便保存自定義cell的高度。

  • 在自定義cell中計(jì)算當(dāng)前cell的高度

    • 強(qiáng)制布局,讓計(jì)算機(jī)算出當(dāng)前cell的高度
    • 根據(jù)有無圖片的情況,獲取cell高度
    [self layoutIfNeeded];  // 強(qiáng)制布局

    if (status.picture) {
        status.cellHeight = CGRectGetMaxY(self.pictureView.frame) + 10;
    }else {
        status.cellHeight = CGRectGetMaxY(self.contentLabel.frame) + 10;
    }
  • 首先在tabelViewControl 中,給出一個(gè)估算高度

之所以先返回一個(gè)大約高度,因?yàn)檫@樣能避免 heightForRowAtIndexPath 方法在 cell 被創(chuàng)建之前就多次調(diào)用.這樣既不會(huì)得不到 cell 的高度,也能一定程度優(yōu)化程序性能.

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

    return 200;
}
  • 然后拿出模型中事先存放好的 cellHeight.
  • 返回每個(gè)cell的高度.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    return [self.statuses[indexPath.row] cellHeight];
}
  • 大功告成
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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