语言: swift, 版本:swift5,XCode:10.2
写作时间:2019-06-27
demo实现
label 根据文字内容自动扩充,label的父视图,根据label的大小而变化
1. 定义父视图和label对象
var viewContainer: UIView!
var label: UILabel!
2. 初始化入口方法
保存约束self.centerYConstraint,实际上上面Y方向已经居中
init() {
super.init(frame: CGRect.zero)
setupViewContainer()
setupCommentField()
self.backgroundColor = UIColor.green
}
3. 父视图方法
父视图初始化UIView,增加到self的视图中
注意不需要设置约束,在label中设置
func setupViewContainer() {
viewContainer = UIView()
viewContainer.backgroundColor = UIColor.blue
self.addSubview(viewContainer)
}
4. label自动换行,父视图与label高度相对
设置label自动换行
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
设置父视图跟label的高度变化
viewContainer.snp.makeConstraints { (make) in
make.centerY.equalTo(self)
make.centerX.equalTo(self)
make.left.equalTo(self).offset(10)
make.right.equalTo(self).offset(-10)
make.height.equalTo(label).offset(100)
}
全部代码
func setupCommentField() {
label = UILabel()
viewContainer.addSubview(label)
label.backgroundColor = UIColor.white
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.text = "hello world, today is a new day. Have a nice day. hello world, today is a new day. Have a nice day. hello world, today is a new day. Have a nice day. hello world, today is a new day. Have a nice day. hello world, today is a new day. Have a nice day. hello world, today is a new day. Have a nice day."
self.addSubview(label)
label.snp.makeConstraints { (make) in
let superView = viewContainer!
make.left.equalTo(superView).offset(10)
make.right.equalTo(superView).offset(-10)
make.centerY.equalTo(superView)
}
viewContainer.snp.makeConstraints { (make) in
make.centerY.equalTo(self)
make.centerX.equalTo(self)
make.left.equalTo(self).offset(10)
make.right.equalTo(self).offset(-10)
make.height.equalTo(label).offset(100)
}
}
5. 总结
label 高度根据内容变化,只要设置属性numberOfLines,lineBreakMode即可。父视图设置高度跟label关联就可以自适应变化。
代码下载
https://github.com/zgpeace/SnapkitDemo/tree/dynamicHeightLabel