5

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

在此处输入图像描述

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

但是,当我还为文本字段设置尾随约束时,只有文本字段的宽度会根据其内容进行调整,但标签会被拉伸。(上图)

我想反其道而行之,这样文本字段就会被拉伸,并且标签会根据其内容进行调整。为什么 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"];
4

2 回答 2

14

在此处输入图像描述

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

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

在此处输入图像描述

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

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

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

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

在此处输入图像描述

于 2013-09-17T11:30:30.217 回答
0

遵循我在情节提要中设置的约束完全符合您的要求。

  • 标签和超级视图之间的水平空间约束。(默认)
  • 文本字段和超级视图之间的水平空间约束。(默认)
  • 文本字段和标签之间的水平空间限制。
于 2013-09-17T11:10:25.347 回答