使用自动布局使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之间的水平空间约束。 (默认)
- 文本字段和标签之间的水平空间约束。
- topLayoutGuide在子视图控制器中
- 在UITableViewCell中加载UIView的Nib文件不能拉伸
- 将子视图的X置于自动布局中将引发“未准备好约束”
- 使用自定义animation时,会在iOS9上忽略edgesForExtendedLayout
- 如何将宽度等同于NSLayoutConstraint的某些UIViews?
- AutoLayout和UILabel调整animation在设备旋转时无法正常工作
- searchBar与section header视图重叠
- 使用“自动布局”,如何使同一“行”上的两个标签在宽度上dynamic变化(根据每个标签的宽度进行调整)?
- 自动布局iOS 11工具栏与customView的UIBarButtonItem