如何使用自动布局调整视图以适应标签子视图?

问题描述:

我正在试图制作一个半透明的黑色矩形,其中包含一些文字,以向用户传达一些信息。它似乎可行,但是当手机的文字大小很大时,标签的内容被切断 - 视图不会扩大其尺寸。如何使用自动布局调整视图以适应标签子视图?

为了创建这个,我添加了一个黑色背景和圆角的UIView,使它有点透明,并在其中放置了一个UILabel。视图上的约束应该允许它在手机旋转时变大,标签上的约束将其边缘固定在视图上。

这里有视图的约束:

Align Center X to: Superview 
Align Center Y to: Superview 
Trailing Space to: Superview >= 40 
Leading Space to: Superview >= 40 
Width >= 200 
Width <= 300 
Height >= 100 
Height <= 150 

和标签的约束:

Trailing Space to: Superview Equals:Default 
Leading Space to: Superview Equals:Default 
Bottom Space to: Superview Equals:Default 
Top Space to: Superview Equals:Default 

当在iPhone 5运行,视图的尺寸为200×102由于某种原因和文本是截断,尽管它的限制允许它达到300 x 150.我做错了什么?

+0

http://*.com/questions/27228279/auto-layout-constraint-with-dynamic-variable – Astoria 2014-12-01 13:32:40

只需将UILabel顶部/底部/顶部/尾部约束设置为零,因为它具有内在内容大小。这意味着标签将希望变得那么宽以包含其全部可见的字符串值。看看this article

创建约束编程

_constraint=[NSLayoutConstraint constraintWith...]; 
[self.view addConstraint:_constraint]; 
//... 
_constraint.constant=40; 

使用插座,如果所有的约束都在IB定义。只要把它连接到你的约束。

@property (nonatomic,weak) IBOutlet NSLayoutConstraint *constraint; 
+0

谢谢。将UILabel约束设置为零,现在UIView在手机旋转时扩展,但现在围绕标签文本没有填充;文本被直接推到视图的边缘。将顶部/底部/前导/尾部约束设置为“8”之类的内容会提供填充,但当旋转电话时,该视图不会调整大小。 如何在视图中添加一些填充以使其看起来更自然? – smeep 2014-11-25 22:27:20

+0

@smeep如果您将约束连接到IBOutlets(或将其保留为类成员),则可以根据需要更改'constant'属性。 – Astoria 2014-11-25 22:43:54

+0

对不起,我不明白。你是说在IB中将其定义为0,但是然后在代码中更改该值?我尝试过,但现在视图不会在手机旋转时调整大小。也许我的假设是错误的 - 是不是可以纯粹用自动布局来做我想做的事情? – smeep 2014-11-25 23:04:22