我正在创建一个带有标签和选择器视图的可扩展单元格
XIB
单元格实施
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
内部单元格实现是警告的原因。
然而,我发现它只发生在给定单元格的第一次点击中,在初始点击后我可以多次点击,每次扩展和关闭它,并且不会发出警告。我是否应该关心此运行时警告?
修改
我忘了显示datePicker约束,包括高度和宽高比:
值得一提的是我利用
self.tableView.estimatedRowHeight = 100.0
self.tableView.rowHeight = UITableViewAutomaticDimension
在viewController
答案 0 :(得分:0)
您将datePicker高度设置为200,但也将单元格高度设置为200。但是单元格高度是datePicker的高度+ 10 +标签的高度。所以这些约束相互冲突。
答案 1 :(得分:0)
我之前尝试过将高度限制的优先级降低到750以及更低,这是行不通的。
但是,由于这个答案https://stackoverflow.com/a/30333810/4286947 我将其设置为999,这就是这里的解决方案