微信朋友圈文字过长收缩功能

需求

经常看到朋友圈中,文字过长,会显示 全文收缩 功能。
如何判断UIlable的长度

实现

直接上代码 命名可能不是那么规范....

extension UILabel{
    
    ///a实际行数是否大于lines行数 vspacing 行间距
    func getLinesLargerNumber(_ lines:Int, _ spacing:CGFloat) -> Bool {
        let linesOld = numberOfLines
        
        numberOfLines = 0
        let labelHeight = sizeThatFits(CGSize(width: bounds.width, height: CGFloat(MAXFLOAT))).height
        let lineHeight = font.lineHeight
        numberOfLines = linesOld
        return labelHeight > (CGFloat(lines) * lineHeight + (CGFloat(lines) - 1)*spacing)
    }
    
    func textStr(str:String,str1:Int,str2:Int,dict:[NSAttributedString.Key : Any],dict1:[NSAttributedString.Key : Any],spacing:CGFloat = 6) {
        let staArt = NSMutableAttributedString(string:str)

        staArt.addAttributes(dict, range: NSRange(location: 0, length: str1))
        staArt.addAttributes(dict1, range: NSRange(location: str1, length: staArt.string.count - str1))
        
        let style = NSMutableParagraphStyle()
        style.alignment = .left
        style.lineSpacing = spacing
        style.lineBreakMode = .byTruncatingTail
        staArt.addAttribute(.paragraphStyle, value: style, range: NSRange(location: 0, length: staArt.string.count))
        
        attributedText = staArt
    }
   
}
  • getLinesLargerNumbe 根据给予最大显示行数、间隔判断是否需要收缩功能。假设最大三行, 如果为true :全文numberOfLines = 0 sizeToFit() , 收缩:numberOfLines = 3 sizeToFit()

  • textStr 方法是一个简单的封装富文本方法,传入字符串,字符串长度,内容,修改UILabel。只是一个简单的封装,还可以再优化。

     说明下:此方法建立再文字的大小相同的富文本中。
    

你可能感兴趣的:(微信朋友圈文字过长收缩功能)