我正在尝试将UILabel实例标签放在UITextField实例文本字段旁边,就像在iOS设置对话框中完成一样。我在Florian Kuglers FLKAutoLayout扩展(https://github.com/dkduck/FLKAutoLayout)的帮助下使用自动布局和约束。
当我只设置标签的前导约束和标签与文本字段之间的空间约束时,标签和文本字段宽度会根据其内容进行调整。 (下图)
但是当我为文本字段设置了一个尾随约束时,只有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"];
答案 0 :(得分:14)
编辑:所以在Rahul的评论之后,我玩了宽度和优先级。将以下宽度约束导致添加到错误的方向,因为输入了一些非常长的值,标签的大小调整得太小。
[self.label constrainWidth:@"0@1"];
所以我最后阅读了“压缩阻力和内容拥抱”(http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html),解决方法是将标签的水平内容拥抱优先级设置为更高的值。
[self.label setContentHuggingPriority:500 forAxis:UILayoutConstraintAxisHorizontal];
然后即使输入大值也会让标签保持宽度和内容的宽度!
解决方案不是添加具有优先级的宽度约束,而是为UIViews的内在内容大小设置Compression Resistance和Content Hugging属性。
答案 1 :(得分:0)
我在故事板中设置的限制符合您的要求。