Swift ios 如何判断标签文本是否被截断
Swift ios how to find out Label text is truncated or not
从情节提要中将行数标记为 3
以下是我用来确定标签文本是否被截断的代码
let size = reviewLbl.text?.size(withAttributes: [.font: reviewLbl.font]) ?? .zero
if (size.height > reviewLbl.frame.size.height) {
}
也尝试关注 link 但它对我不起作用所以不要将此称为重复问题
How to check if UILabel is truncated?
试试这个扩展:
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: [.font: font],
context: nil).size
return labelTextSize.height > bounds.size.height
}
}
并像这样使用它:
if myLabel.isTruncated {
// Show more
}
func countLabelLines() -> Int {
// Call self.layoutIfNeeded() if your view is uses auto layout
let myText = self.text! as NSString
let attributes = [NSAttributedString.Key.font : self.font]
let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes as [NSAttributedString.Key : Any], context: nil)
return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
}
func isTruncatedOrNot() -> Bool {
if (self.countLabelLines() > self.numberOfLines) {
return true
}
return false
}
试试这个,self.bound.width 是你的标签宽度,所以如果你在堆栈视图中添加标签,请确保标签宽度或堆栈视图有适当的约束。
在您的情况下,它每次都返回 true,因为它可能有约束问题。
从情节提要中将行数标记为 3
以下是我用来确定标签文本是否被截断的代码
let size = reviewLbl.text?.size(withAttributes: [.font: reviewLbl.font]) ?? .zero
if (size.height > reviewLbl.frame.size.height) {
}
也尝试关注 link 但它对我不起作用所以不要将此称为重复问题
How to check if UILabel is truncated?
试试这个扩展:
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: [.font: font],
context: nil).size
return labelTextSize.height > bounds.size.height
}
}
并像这样使用它:
if myLabel.isTruncated {
// Show more
}
func countLabelLines() -> Int {
// Call self.layoutIfNeeded() if your view is uses auto layout
let myText = self.text! as NSString
let attributes = [NSAttributedString.Key.font : self.font]
let labelSize = myText.boundingRect(with: CGSize(width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: attributes as [NSAttributedString.Key : Any], context: nil)
return Int(ceil(CGFloat(labelSize.height) / self.font.lineHeight))
}
func isTruncatedOrNot() -> Bool {
if (self.countLabelLines() > self.numberOfLines) {
return true
}
return false
}
试试这个,self.bound.width 是你的标签宽度,所以如果你在堆栈视图中添加标签,请确保标签宽度或堆栈视图有适当的约束。
在您的情况下,它每次都返回 true,因为它可能有约束问题。