需求
经常看到朋友圈中,文字过长,会显示 全文 和 收缩 功能。
如何判断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。只是一个简单的封装,还可以再优化。
说明下:此方法建立再文字的大小相同的富文本中。 |