lable高度自适应主要就是指定宽度,获取文本的高度即可
第一种使用系统的计算方法,OC中有宏定义,所以可以使用CGFLOAT_MAX来设定高度,Swift中找了一个属性类进行代替,呈现的bug就是字体不是17号的时候会有计算误差.
let str = "夫斯川锦阳,盖自古四季斑斓、俊秀也。亘古以来,洪荒涤荡,复漫平陆。余创作小说《华原春梦》,耀州游历,十年七次涉此,堪踏古迹,寻访绿野仙踪。所得故事、传说、圣哲、大贤事迹者颇丰,素材累累。望离离平川,思昔日之牧歌,心旷远矣。桃林耕种,村姑回眸,后生扶犁,祥光照射,恬静而快乐。眺青黛远山,感大贤之卓越巍峨,且行且吟,衣襟风月,红尘难遮。"
let lable = UILabel()
lable.text = str
lable.backgroundColor = UIColor.orange
lable.font = UIFont.systemFont(ofSize: 11)
lable.numberOfLines = 0
lable.frame = CGRect.init(x: 10, y: 20, width: 130, height: 0)
let atts = [NSFontAttributeName: UIFont.systemFont(ofSize:17 )]
let size = str.boundingRect(with: CGSize(width: CGFloat(120), height: CGFloat.greatestFiniteMagnitude),options:NSStringDrawingOptions.usesLineFragmentOrigin, attributes:atts,context:nil).size
lable.frame = CGRect(x: 10, y: 0, width: (size.width), height: (size.height))
self.view.addSubview(lable)
第二种方法使用了sizeToFit属性,先把lable的高度设0,在赋值文本内容以后再获取lable的高度即可,然后重新定义高度
let str = "夫斯川锦阳,盖自古四季斑斓、俊秀也。亘古以来,洪荒涤荡,复漫平陆。余创作小说《华原春梦》,耀州游历,十年七次涉此,堪踏古迹,寻访绿野仙踪。所得故事、传说、圣哲、大贤事迹者颇丰,素材累累。望离离平川,思昔日之牧歌,心旷远矣。桃林耕种,村姑回眸,后生扶犁,祥光照射,恬静而快乐。眺青黛远山,感大贤之卓越巍峨,且行且吟,衣襟风月,红尘难遮。"
let lable = UILabel()
lable.text = str
lable.backgroundColor = UIColor.orange
lable.font = UIFont.systemFont(ofSize: 11)
lable.numberOfLines = 0
lable.frame = CGRect.init(x: 10, y: 20, width: 130, height: 0)
lable.sizeToFit()
height = lable.frame.size.height + 10
lable.frame.size.height = height!
self.view.addSubview(lable)