代码之家  ›  专栏  ›  技术社区  ›  Hans

Swift截断标签替代文本

  •  3
  • Hans  · 技术社区  · 8 年前

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

    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 回复  |  直到 8 年前
        1
  •  3
  •   Rashwan L    8 年前

    你可以这样做:

    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]()
    

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

    4: 检查标签是否被截断,如果是,则添加默认值并将原始值存储到dict:

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

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