簡體   English   中英

表格視圖單元格標簽在換行符中不一致

[英]Table view cell labels are inconsistent in line break

我有一個自定義表格視圖單元格,里面有一個 label。 我注意到每七個單元格的 label 過早地打破第一行。 屏幕截圖上的所有單元格在其標簽文本的開頭都有相同的字符串子序列(黑色和紅色橢圓)。 正如您可能已經猜到的那樣,中間單元是第七個。 如果我向下滾動 7 個單元格,結果將是相同的

label配置:

descriptionLabel.numberOfLines = 0
descriptionLabel.lineBreakMode = .byWordWrapping

我不知道如何解決這個問題,懇求您的幫助。 提前致謝!

截屏

“孤兒”是段落末尾的一行中的一個單詞。 在排版中,最后留下一個懸空的單詞被認為是“糟糕的布局”。

因此,Apple 對UILabel進行了編碼以避免“孤兒”。

如果您不介意標簽中的孤兒,則UITextView不會強制執行此操作——因此您可以使用UITextView (禁用編輯和滾動)。

但是,正如您在這張圖片中看到的那樣:

在此處輸入圖像描述

UITextView具有來自實際框架的文本的默認“插圖”。

因此,這是一個刪除插圖的@IBDesignable子類:

@IBDesignable
class TextViewLabel: UITextView {
    
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        commonInit()
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }
    
    func commonInit() -> Void {
        isScrollEnabled = false
        isEditable = false
        isSelectable = false
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
    }
    
}

編輯以澄清...

這是三個默認的UILabel ,寬度完全相同:

在此處輸入圖像描述

請注意,對於 label A ,第一行末尾有足夠的空間放置單詞"an" ,但它會被包裝到第二行以防止出現孤兒 - 也就是說,防止第二行出現單個單詞.

對於 label B ,單詞"an"保留在第一行,因為自動換行導致第二行出現兩個單詞。

正如我們在 label C中看到的那樣,如果文本換行超過兩行,則UILabel允許孤兒 - 最后一行上的單個單詞。

通過用TextViewLabel子類替換默認的UILabel ,我們可以強制兩行換行忽略“孤兒”換行:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM