[英]Table view cell labels are inconsistent in line break
“孤兒”是段落末尾的一行中的一個單詞。 在排版中,最后留下一個懸空的單詞被認為是“糟糕的布局”。
因此,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.