使用自动布局使 UILabel 和 UITextField 彼此相邻 [英] Using Auto Layout to have UILabel and UITextField next to each other

查看:18
本文介绍了使用自动布局使 UILabel 和 UITextField 彼此相邻的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 UILabel 实例标签放置在 UITextField 实例文本字段旁边,就像在 iOS 设置对话框中所做的那样.我在 Florian Kuglers FLKAutoLayout 扩展的帮助下使用自动布局和约束(),解决方法是将标签的水平内容拥抱优先级设置为更高的值.

[self.label setContentHuggingPriority:500 forAxis:UILayoutConstraintAxisHorizo​​ntal];

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

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

I am trying to position a UILabel instance label next to a UITextField instance textfield like done in the iOS Settings dialogs. I'm using Auto Layout and constraints with the help of Florian Kuglers FLKAutoLayout extensions (https://github.com/dkduck/FLKAutoLayout).

When I set only a leading constraint for the label and a space constraint between label and textfield, the label and textfield widths are adjusted to their content. (bottom picture)

But when I set also a trailing constraint for the textfield, only textfields width is adjusted to its content, but label is stretched. (top picture)

I want to behave the opposite around, so that the textfield will be stretched and the label is adjusted to its content. Why does iOS decide to stretch the label instead of the textfield?

[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"];

解决方案

EDITED: So after the comment of Rahul I played with width and priorities. Adding the following width constraint lead into the somewhat wrong direction, because of entering some very long value, the label was resized too small.

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

So I finally read up on "Compression Resistance and Content Hugging" (http://www.objc.io/issue-3/advanced-auto-layout-toolbox.html) and the solution is to set the Horizontal Content Hugging priority of the label to a higher value.

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

Then even entering big values will let the label stay as width as its content!

Solution is not adding a width constraint with priority, but to set Compression Resistance and Content Hugging properties for the intrinsic content size of the UIViews.

这篇关于使用自动布局使 UILabel 和 UITextField 彼此相邻的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆