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

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

在这里输入图像说明

当我只为标签设置一个主要约束,并在标签和文本字段之间设置空间约束时,标签和文本字段宽度将根据其内容进行调整。 (底部图片)

但是,当我也设置了文本字段的尾部限制时,只有文本字段宽度被调整为其内容,但标签被拉伸。 (上图)

我想performance得相反,所以文本字段将被拉伸,标签被调整到其内容。 为什么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"]; 

在这里输入图像说明

编辑:所以在拉胡尔的评论后,宽度和优先事项。 添加下面的宽度约束导致有些错误的方向,因为input一些很长的值,标签调整得太小了。

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

在这里输入图像说明

于是我终于读到了“压缩阻力和内容拥抱”( http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html ),解决方法是设置“横向内容拥抱”优先级标签的值更高。

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

那么即使input大的值也会让标签保持与其内容一样的宽度!

解决scheme是不添加具有优先级的宽度约束,而是为UIView的内在内容大小设置“压缩阻力”和“内容拥抱”属性。

在这里输入图像说明

以下我在故事板中设定的约束条件完全符合您的要求。

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