【问题标题】:Swift ios how to find out Label text is truncated or notSwift ios如何找出标签文本是否被截断
【发布时间】:2019-12-31 17:30:51
【问题描述】:

从情节提要中将行数标记为 3

以下是我找出标签文本是否被截断的代码

 let size = reviewLbl.text?.size(withAttributes: [.font: reviewLbl.font]) ?? .zero
    if (size.height > reviewLbl.frame.size.height) {

    }

也尝试了以下链接,但它对我不起作用,所以不要将此称为重复问题

How to check if UILabel is truncated?

【问题讨论】:

标签: ios swift fonts uilabel truncate


【解决方案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: [.font: font],
            context: nil).size

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

并像这样使用它:

if myLabel.isTruncated {
   // Show more
}

【讨论】:

  • 即使没有被截断也返回真
【解决方案2】:
  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,因为它可能存在约束问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2020-08-24
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多