使用自动布局使UILabel和UITextField彼此相邻

时间:2013-09-17 09:25:34

标签: ios objective-c autolayout flkautolayout

我正在尝试将UILabel实例标签放在UITextField实例文本字段旁边,就像在iOS设置对话框中完成一样。我在Florian Kuglers FLKAutoLayout扩展(https://github.com/dkduck/FLKAutoLayout)的帮助下使用自动布局和约束。

enter image description here

当我只设置标签的前导约束和标签与文本字段之间的空间约束时,标签和文本字段宽度会根据其内容进行调整。 (下图)

但是当我为文本字段设置了一个尾随约束时,只有textfields宽度被调整为其内容,但标签被拉伸。 (上图)

我希望表现相反,以便拉伸文本字段并将标签调整为其内容。为什么iOS决定拉伸标签而不是文本字段?

[self addSubview:self.label];
[self addSubview:self.textField];

[self.label alignLeadingEdgeWithView:self predicate:@"10"];
[self.textField constrainLeadingSpaceToView:self.label predicate:@"10"];

// difference between top and bottom pciture
// [self.textField alignTrailingEdgeWithView:self predicate:@"-25"];

2 个答案:

答案 0 :(得分:14)

enter image description here

编辑:所以在Rahul的评论之后,我玩了宽度和优先级。将以下宽度约束导致添加到错误的方向,因为输入了一些非常长的值,标签的大小调整得太小。

[self.label constrainWidth:@"0@1"];

enter image description here

所以我最后阅读了“压缩阻力和内容拥抱”(http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html),解决方法是将标签的水平内容拥抱优先级设置为更高的值。

[self.label setContentHuggingPriority:500 forAxis:UILayoutConstraintAxisHorizontal];

然后即使输入大值也会让标签保持宽度和内容的宽度!

解决方案不是添加具有优先级的宽度约束,而是为UIViews的内在内容大小设置Compression Resistance和Content Hugging属性。

enter image description here

答案 1 :(得分:0)

我在故事板中设置的限制符合您的要求。

  • 标签和超级视图之间的水平空间约束。(默认)
  • textfield和superview之间的水平空间约束。 (默认)
  • 文本字段和标签之间的水平空间约束。