我正在使用静态表视图控制器并在Interface Builder中定义UI。
我希望所有UILabel的宽度相同,以便UITextFields的左侧对齐。
如果我强迫宽度,那么他们经常互相透支。
我正在考虑根据控制器中“安全消息”的宽度以编程方式修改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();
答案 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 edges
和Align Trailing edges
,然后设置Content Hugging Priority
和Content Compression Resistance Priority
以及不要裁剪的标签,适合。
将UITextFields
约束设置为Align Leading edges
和Align Trailing edges
,这样就可以了。