我有UILabel
水平居中,宽度应根据其内容长度设置。在UILabel
和UIImage
的左侧应放置一个应与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号。
答案 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];