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