自动布局中心uilabel在x轴上适合内容与uiimage左侧

时间:2014-07-31 14:05:58

标签: ios uiimage uilabel autolayout

我有UILabel水平居中,宽度应根据其内容长度设置。在UILabelUIImage的左侧应放置一个应与UILabel对齐的位置。如果UILabel需要更多空间,则应将UIImage推向左侧,如果UILabel需要更少的空间,则应将UIImage拉向x-center。

我没有布局正常工作,但必须使用自动布局。我正在尝试,但我无法弄明白。

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-padding-[img(16)][lblUserName]-padding-|" options:0 metrics:@{@"padding":[NSNumber numberWithFloat:Padding]} views:displayViewDic];

是否可以进行自动布局?所以有时它会像1号和其他时间一样,如2号。

enter image description here

2 个答案:

答案 0 :(得分:1)

为标签添加水平中心约束。就是这样,合适的y位置约束会使标签保持在中心位置。它会在两个方向上均匀扩展以适应内容。

现在,将水平间距约束添加到图像视图的尾随空间和x位置的标签前导空间,y位置的合适约束(可能与标签对齐垂直中心,也许?)和尺寸的合适约束/图像/内在尺寸。

代码:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[img(width)]-padding-[lblUserName]" options:0 metrics:@{@"width": 50, @"padding": 20} views:displayViewDic]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:lblUserName attribute:NSLayoutAttributeCenterX relatedBy:0 toItem:superview attribute:NSLayoutAttributeCenterX multiplier:0.0 constant:0.0]];

答案 1 :(得分:1)

@"H:|-padding-[img(16)][lblUserName]-padding-|"

这里你说的是图像必须与superview的前沿保持固定的距离。这与您的描述不符。

您可能只需要将其更改为

@"H:|-(>=padding)-[img(16)][lblUserName]-(>=padding)-|"

允许边距有一定的灵活性。

要水平居中视图,您必须手动创建约束:

[view addConstraint:[NSLayoutConstraint constraintWithItem:lblUserName
     attribute:NSLayoutAttributeCenterX 
     relatedBy:NSLayoutRelationEqual 
     toItem:view 
     attribute:NSLayoutAttributeCenterX 
     multiplier:1.0 
     constant:0]];

您不需要使用sizeToFit或任何其他类似的方法 - 图像视图和标签将具有基于图像或文本的内在内容大小。

因为你有不平等,你可能需要强制标签尽可能窄以防止拉伸:

[lblUserName setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];