Swift 截断的标签替代文本

Swift truncated label alternative text

我在水平堆栈视图控制器中有两个标签:

labelA.text = "This is text number A"
labelB.text = "This is text number B"

它们正在被截断:

[This is... This is...]

有没有办法为标签提供替代文本以显示它是否会截断原始文本,例如

labelA.alternateText = "A"
labelB.alternateText = "B"

所以显示

[A B ]

但如果可以的话,仍会显示两个标签的全文

你可以这样做:

1: 添加一个扩展来检查你的标签是否被截断

extension UILabel {
    var isTruncated: Bool {
        guard let labelText = text else {
            return false
        }
        let labelTextSize = (labelText as NSString).boundingRect(
            with: CGSize(width: frame.size.width, height: .greatestFiniteMagnitude),
            options: .usesLineFragmentOrigin,
            attributes: [NSFontAttributeName: font],
            context: nil).size

        return labelTextSize.height > bounds.size.height
    }
}

2:添加字典存放原始字符串

var dict = [Int:Any]()

3: 当你添加你的标签时,给它们添加标签(这将代表密钥)

let label = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 50))
label.text = "This is text number A"
label.tag = 0

4:检查标签是否被截断,如果是他们添加一个默认值并将原始值存储到你的字典中:

if label.isTruncated {
    dict.updateValue(label.text, forKey: label.tag)
    label.text = "A"
}

5: 取回原值

let original = dict[0] // for tag 0 for example