How to check if UILabel is truncated?

前端 未结 20 2761
不知归路
不知归路 2020-11-28 02:53

I have a UILabel that can be varying lengths depending on whether or not my app is running in portrait or landscape mode on an iPhone or iPad. When the text is

20条回答
  •  天涯浪人
    2020-11-28 03:14

    Swift (as extension) - works for multi line uilabel:

    swift4: (attributes param of boundingRect changed slightly)

    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
        }
    }
    

    swift3:

    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
        }
    }
    

    swift2:

    extension UILabel {
    
        func isTruncated() -> Bool {
    
            if let string = self.text {
    
                let size: CGSize = (string as NSString).boundingRectWithSize(
                    CGSize(width: self.frame.size.width, height: CGFloat(FLT_MAX)),
                    options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                    attributes: [NSFontAttributeName: self.font],
                    context: nil).size
    
                if (size.height > self.bounds.size.height) {
                    return true
                }
            }
    
            return false
        }
    
    }
    

提交回复
热议问题