Xcode 原型单元内的自动布局和动态宽度UILabel

Xcode 原型单元内的自动布局和动态宽度UILabel,xcode,swift,ios8,autolayout,Xcode,Swift,Ios8,Autolayout,我正在尝试创建一个“3列”UITableViewCell,其中每列包含一个UILabel。最左边的两个标签很容易设置约束,它们的宽度是固定的,并且它们的文本不会超过它们的IB设置宽度。但是,正确的标签可能有一个长字符串,我想说的是,“你可以任意宽,直到你的宽度在superview边缘的8个像素以内。” 通过添加 override func layoutSubviews() { ENTRY_LOG() log.debug("\(self.frame.width)") s

我正在尝试创建一个“3列”
UITableViewCell
,其中每列包含一个
UILabel
。最左边的两个标签很容易设置约束,它们的宽度是固定的,并且它们的文本不会超过它们的IB设置宽度。但是,正确的标签可能有一个长字符串,我想说的是,“你可以任意宽,直到你的宽度在superview边缘的8个像素以内。”

通过添加

override func layoutSubviews() {
    ENTRY_LOG()

    log.debug("\(self.frame.width)")
    self.addConstraint(NSLayoutConstraint(item: self.destinationLabel, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: self.frame.width - 151))
    self.setNeedsUpdateConstraints()

  }

在自定义的
UITableViewCell
类中,但这会造成破坏单元格高度和覆盖表行之间默认行的不良影响。

如果不希望高度由单元格内容的继承高度决定,则必须显式指定它。最好的方法是直接在表视图上设置行高:

tableView.rowHeight = 44

您还可以使用“表视图”委托为特定单元格指定它,这是否有问题?一个>=8px的尾随空间到superview constaint将完成您需要的任务


关于您的评论:“第二列被“压碎”了”-您应该能够通过将中间标签上的“抗压优先级”设置为大于最右边标签的值来解决这个问题。

将右边距约束设置为
=8
不起作用?很遗憾,不起作用,当添加该列时,它似乎对某些行起作用,但在其他行上,第二列“被压碎”而不存在。@zisoft请参见下文,
=8
有帮助,但中心标签的抗压优先级必须设置为高于右标签的抗压优先级。Brilliant-几乎在那里-在中心标签上设置抗压优先级确实可以防止压碎,这与
=8
一起也有帮助。在由于某种原因向表发出
reloadData()
之前,视图无法正常工作,因此必须处理该问题。