如何在Interface Builder中实现此布局?

时间:2017-06-22 00:22:22

标签: ios swift user-interface interface-builder

我正在使用静态表视图控制器并在Interface Builder中定义UI。

我希望所有UILabel的宽度相同,以便UITextFields的左侧对齐。

如果我强迫宽度,那么他们经常互相透支。

enter image description here

我正在考虑根据控制器中“安全消息”的宽度以编程方式修改UILabel宽度,但我无法重新布局。

let width = labelSafeMessage.frame.size.width;
labelName.frame.size.width = labelSafeMessage.frame.size.width;
labelName.sizeToFit();
labelMessage.frame.size.width = labelSafeMessage.frame.size.width;
labelMessage.sizeToFit();

3 个答案:

答案 0 :(得分:1)

您只能使用Interface Build执行此操作,并且您不需要强制标签具有相同的大小。您需要做的唯一事情是将UITextFields的前导间距设置为superview,它们将对齐到左侧。

答案 1 :(得分:0)

您可以通过在tableView显示数据之前计算宽度来避免重新布局。

获取集合中的最大字符串,然后使用此

var str = "Hello, playground"
let constraintRect = CGSize(width: CGFloat.greatestFiniteMagnitude, height: DEFINED_HEIGHT)
let boundingBox = (str as? NSString)?.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: FONT], context: nil)
boundingBox.width //width for the labels

只需将DEFINED_HEIGHT替换为标签的高度,该高度将是行的高度减去保持它的顶部和底部约束。 和FONT,用于标签中使用的字体。

答案 2 :(得分:0)

您可以使用包含UITableView的垂直UIStackView,而不是使用UIViews

UILabels约束设置为Align Leading edgesAlign Trailing edges,然后设置Content Hugging PriorityContent Compression Resistance Priority以及不要裁剪的标签,适合。

UITextFields约束设置为Align Leading edgesAlign Trailing edges,这样就可以了。