我正在向一个视图添加一个UILabel,并满足以下布局要求:
- 标签应该居中
- 标签的最大字体大小为100点,但应缩小以适应。不应截断。
- 标签的高度不应超过450点。
- 另一个视图将直接位于标签下方。
我的标签属性布局约束似乎已经充分描述了这一点:
let label = UILabel()
label.backgroundColor = UIColor.yellowColor()
label.font = UIFont.systemFontOfSize(100)
label.numberOfLines = 0
label.textAlignment = .Center
label.adjustsFontSizeToFitWidth = true
label.text = "What's Brewing in PET/CT: CT and MR Emphasis"
label.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(label)
view.addConstraint(NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .Left, multiplier: 1, constant: 60))
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Right, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1, constant: -60))
view.addConstraint(NSLayoutConstraint(item: label, attribute: .Height, relatedBy: .LessThanOrEqual, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 450))
然而,我发现在像下面一样的较长内容中,标签会出现一些意外的间距:
这是不可接受的,因为任何放置在标签上方或下方的视图都会有一个间隙。
根据下面的讨论,我的工作理论是布局引擎基于字体大小100进行大小计算,而没有考虑到后续内容变长时的缩放。
如何满足上述布局要求(最好不使用任何已弃用的方法)?
这里是一个可供测试的测试项目。
[label sizeToFit];
。我不是一个熟练的Swift程序员,但我猜应该是label.sizeToFit()
。 - Rory McKinnel