iOS - 使用自动布局设置UILabel的最大宽度

7
我有一个UILabel,它包含在一个固定大小的UIView中。UILabel的文本是动态的。我该如何确保UILabel不会比包含的UIView更大?
在使用AutoLayout之前,通过使用AdjustsFontSizeToFitWidth很容易实现此目标,但是我无法再使用Autolayout完成这项工作。
我应该从UILabel到UIView添加哪些约束?现在它只是Leading对齐。

4
视图宽度不超过父视图宽度。 - Timur Bernikovich
4个回答

5

对于这种视图,如UILabel,有一些特殊的方法(contentHuggingcontentCompressionResistance),但它们已经被启用了。所以你只需要禁用标签的宽度增长到父视图的宽度。

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.label attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationLessThanOrEqual toItem:self.label.superview attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f];    
[self.label addConstraint:widthConstraint];

你对这个问题的评论非常好,只有一个问题:我该如何调整UILabel的字体大小,以便它适应我给定的最大宽度? - el-flor
1
myLabel.adjustsFontSizeToFitWidth = YES; myLabel.minimumScaleFactor = .5f; 这对我有用!非常感谢 Timur。 - el-flor

0

我将添加以下左、上、右约束:

enter image description here

在Storyboard中,只需点击几下即可:
  • 选择您的标签
  • 在添加约束面板(右下角)中,选择要添加的约束

enter image description here


0

拖动并调整标签大小以适应屏幕的全宽度,可以在两侧留下一些填充空间。 设置4个约束条件: 1)标签的高度。 2)与UIView的顶部间距。 3)与UIView的前导间距。 4)与UIView的尾随间距。

最后,将标签的horizontalcompressionResistense优先级设置为1000。


0

Swift 3和4

var widthConstraint = NSLayoutConstraint(item: label, attribute: .width, relatedBy: .lessThanOrEqual, toItem: label.superview, attribute: .width, multiplier: 1.0, constant: 0.0)
label.addConstraint(widthConstraint)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接