如何在Interface Builder中实现这种布局?

问题描述:

我正在使用静态表视图控制器并在界面生成器中定义UI。如何在Interface Builder中实现这种布局?

我希望所有的UILabels都是相同的宽度,以便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(); 

你可以只使用Interface Build来做到这一点,你不需要强制标签具有相同的大小。你需要做的唯一事情就是将UITextField的前导间距设置为超级视图,并且它们将对齐到左侧。

+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,用于标签中使用的字体。

而不是使用UITableView你可以使用垂直UIStackView谁将包含UIViews

设置你的UILabels约束Align Leading edgesAlign Trailing edges并设置Content Hugging PriorityContent Compression Resistance Priority以及标签不被剪裁,适合正常。

UITextFields限制条件设置为Align Leading edgesAlign Trailing edges彼此相互关联,这将有所斩获。