美文网首页
微信朋友圈文字过长收缩功能

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

作者: 凨弥 | 来源:发表于2018-08-10 11:07 被阅读0次

    需求

    经常看到朋友圈中,文字过长,会显示 全文收缩 功能。
    如何判断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。只是一个简单的封装,还可以再优化。

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

    相关文章

      网友评论

          本文标题:微信朋友圈文字过长收缩功能

          本文链接:https://www.haomeiwen.com/subject/mjkkbftx.html