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
我在水平堆栈视图控制器中有两个标签:
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