我需要对齐两个UILabel
的前导和尾随,例如,我希望两个标签像这样对齐(方括号表示标签'帧):
label1 = [Hello World in Big Font]
label2 = [welcome to the world in
smaller font that wraps
into two multiple lines]
但结果是
label1 = [ Hello World in Big Font ]
label2 = [welcome to the world in smaller font that wraps into two multiple lines]
我知道我可以调整第二个标签的首选字体宽度,但有更好的方法吗?
谢谢!
答案 0 :(得分:0)
为第二个标签添加宽度约束,使其等于第一个标签的宽度。
答案 1 :(得分:0)
请试试这个
label1.text = "your text"
label1.sizeToFit()
label2.frame.size = label1.frame.size
label2.numberOfLines = 0
label2.text = "your long text"
答案 2 :(得分:0)
label1.textAlignment = .left
self.view.addSubview(label1)
label1.snp.makeConstraints { (make) -> Void in
make.height.left.top.equalTo(21)
make.right. lessThanOrEqualTo(self.view).offset(-20)
}
label2.textAlignment = .left
label2.numberOfLines = 0
self.view.addSubview(label2)
label2.snp.makeConstraints { (make) -> Void in
make.left.right.equalTo(label1)
make.top.equalTo(label1.snp.bottom).offset(20)
}
使用不带SnapKit的AutoLayout
let label1 = UILabel()
label1.textAlignment = .left
self.view.addSubview(label1)
let constraintOne = NSLayoutConstraint.init(item: label1, attribute: .left, relatedBy: .equal, toItem: self.view, attribute: .left, multiplier: 1, constant: 20)
let constraintTwo = NSLayoutConstraint.init(item: label1, attribute: .right, relatedBy: .lessThanOrEqual, toItem: self.view, attribute: .right, multiplier: 1, constant: -20)
let constraintThree = NSLayoutConstraint.init(item: label1, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 20)
let constraintFour = NSLayoutConstraint.init(item: label1, attribute: .top, relatedBy: .greaterThanOrEqual, toItem: self.view, attribute: .top, multiplier: 1, constant: 20)
let label2 = UILabel()
label2.textAlignment = .left
label2.numberOfLines = 0
self.view.addSubview(label2)
let layoutConstraintOne = NSLayoutConstraint.init(item: label2, attribute: .left, relatedBy: .equal, toItem: label1, attribute: .left, multiplier: 1, constant: 0)
let layoutConstraintTwo = NSLayoutConstraint.init(item: label2, attribute: .right, relatedBy: .equal, toItem: label1, attribute: .right, multiplier: 1, constant: 0)
let layoutConstraintThree = NSLayoutConstraint.init(item: label2, attribute: .top, relatedBy: .equal, toItem: label1, attribute: .bottom, multiplier: 1, constant: 20)
NSLayoutConstraint.activate([constraintOne, constraintTwo, constraintThree, constraintFour,layoutConstraintOne, layoutConstraintTwo,layoutConstraintThree ])
答案 3 :(得分:0)
对于第一个标签,您只能应用顶部和前导约束。因此对于第二个标签,设置前导,宽度与第一个标签相同。
答案 4 :(得分:0)
尝试了几种方法之后,我找到了一种方法。
我没有对标签的前导和尾随进行约束,而是将它们全部放在中心X w.r.t superview中,并在视图控制器中viewDidLayoutSubviews
:
[label1 sizeToFit]
确保frame
的{{1}}仅适用于其文字,然后我这样做:
label1
并声明label2.preferredMaxLayoutWidth = label1.bounds.size.width
多行标签的首选最大宽度(以磅为单位)。
当应用布局约束时,此属性会影响标签的大小。在布局期间,如果文本超出此属性指定的宽度,则附加文本将流向一个或多个新行,从而增加标签的高度。
确保preferredMaxLayoutWidth
'文字符合label2
的宽度边界,如果宽度不足以显示单行文字,则会分成多行。
答案 5 :(得分:0)
尝试将第一个标签的内容优先级设置为.defaultHigh + 1.0
。