Swift UILabel高度自适应 (UILabel高度和宽度随文本的字数动态适应时,UILabel上下部分会留白无法填充满的问题解决方案)

在项目中使用UILabel时通常需要实现高度自适应,方法就是先计算文本字体的数目然后去计算需要的高度:

方法如下:

let label = UILabel()
label.backgroundColor = UIColor.gray
label.text = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"
        
label.font = UIFont.systemFont(ofSize: 15)
label.textColor = UIColor.red
label.textAlignment = .left
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
let boundingRect = label.text!.boundingRect(with: CGSize(width: 200, height: 0), options: .usesLineFragmentOrigin, attributes:[NSAttributedString.Key.font:UIFont.systemFont(ofSize: 14)], context: nil)
label.frame = CGRect(x: 10, y: 200, width: self.view.frame.width - 20, height: boundingRect.height)
self.view.addSubview(label)

实现效果如下:

Swift UILabel高度自适应 (UILabel高度和宽度随文本的字数动态适应时,UILabel上下部分会留白无法填充满的问题解决方案)_第1张图片

我们会发现label的上下部门会有留白我们无法填充满。这会导致如果我们的label的下面和上面需要再添加UI时,UI的布局就会乱掉。

那么解决的方法也很简单,只需要改变计算文本字数的方法,设置高度为CGFloat(MAXFLOAT)即可,方法如下:

let label = UILabel()
label.backgroundColor = UIColor.gray
label.text = "testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"
        
label.font = UIFont.systemFont(ofSize: 15)
label.textColor = UIColor.red
label.textAlignment = .left
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
let size = label.sizeThatFits(CGSize(width: self.view.frame.width, height: CGFloat(MAXFLOAT)))
label.frame = CGRect(x: 10, y: 200, width: self.view.frame.width - 20, height: size.height)
self.view.addSubview(label)

结果如下:

Swift UILabel高度自适应 (UILabel高度和宽度随文本的字数动态适应时,UILabel上下部分会留白无法填充满的问题解决方案)_第2张图片

你可能感兴趣的:(IT,iOS,swift,自定义UI)