Swift – 可扩展TableViewCell中的约束问题

我正在用标签和选取器视图创build一个可展开的单元格

厦门国际银行

在这里输入图像说明

单元实现

class PickerViewCell: UITableViewCell { @IBOutlet weak var detailLabel: UILabel! @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var height: NSLayoutConstraint! @IBOutlet weak var picker: UIDatePicker! var isExpanded:Bool = false { didSet { if isExpanded == false{ self.height.constant = 0.0 self.picker.hidden = true } else{ self.height.constant = 200.0 self.picker.hidden = false } } } override func awakeFromNib() { self.height.constant = 0.0 super.awakeFromNib() } 

委托方法

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { guard let cell = tableView.cellForRowAtIndexPath(indexPath) as? PickerViewCell else { return } cell.isExpanded = !cell.isExpanded print(cell.isExpanded) UIView.animateWithDuration(0.3) { cell.contentView.layoutIfNeeded() } tableView.beginUpdates() tableView.endUpdates() tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true) } 

我不断收到有关破坏约束的运行时警告。

在这里输入图像说明

我设置了一个符号断点,而我发现的是这一行

 self.height.constant = 200.0 

里面的单元实现是警告的原因。

但是,我发现只有在第一次点击某个特定单元格时才会发生这种情况,在初始点击之后,我可以多次点击,每次扩展和closures,并且不会发生警告。 我应该甚至关心这个运行时警告?

编辑:

我忘了显示datePicker约束,包括高度和宽高比:

在这里输入图像说明

另外值得一提的是我利用

 self.tableView.estimatedRowHeight = 100.0 self.tableView.rowHeight = UITableViewAutomaticDimension 

在我的viewController

您将datePicker高度设置为200,但是然后将单元格高度设置为200。 但单元格高度是datePicker的高度+ 10 +标签的高度。 所以这些约束相互冲突。

我之前试过将高度限制的优先级降低到750以下,那是行不通的。

但是,感谢这个答案https://stackoverflow.com/a/30333810/4286947 我把它设置为999,这原来是这里的解决scheme