使用Autolayout或約束對多行文本Label進行布局,高度不準(zhǔn)確(文字截斷)的解決辦法

問題描述

在xib或者storyboard(也許還有純代碼)使用約束或者autolayout布局之后,UILabel載入多行文字時高度計算不準(zhǔn)確,造成文字截斷,顯示不全。

解決方法

設(shè)置label.preferredMaxLayoutWidth屬性,使其等于label的實際寬度即可解決問題

  // UITableViewCell子類中,實際測試無效
  override func layoutSubviews() {
    super.layoutSubviews()
    cell.contentView.layoutIfNeeded()
    cell.label.preferredMaxLayoutWidth = cell.label.frame.width
  }
  // UITableView子類中,實際測試有效
  override func tableView(_ tableView: UITableView, cellForRowAt indexPaht: IndexPath) -> UITableViewCell {
    let cell = YourTableViewCell()
    // ...
    // cell.contentView.layoutIfNeeded()    // 實測不需要
    cell.label.preferredMaxLayoutWidth = cell.label.frame.width
    return cell
  }

這里需要注意調(diào)用cell.contentView的layoutIfNeeded方法,理論上通過這個方法可以獲得準(zhǔn)確的cell.label.frame.width,但是實測時不使用該方法也可以

特別提示

本文中的方法沒有任何理論依據(jù),僅通過實際操作可能確認(rèn)。

理論上在UITableViewCell子類中重載layoutSubviews方法更加可行,但是實際測試卻不能立即生效,cell第一次顯示時依然可能存在被截斷的問題,第二次以后顯示正常。

而實際可行的方法中,cell還沒有加載到視圖,label寬度更是無從計算,不知道系統(tǒng)是如何得出正確的尺寸的。在調(diào)試輸出label此時的寬度也確實是隨機的,但是顯示結(jié)果卻正確+_+

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

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

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