首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

需求

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

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