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

时间:2016-08-22 14:15:09

标签: ios swift uitableview nslayoutconstraint tableviewcell

我正在创建一个带有标签和选择器视图的可扩展单元格

XIB

enter image description here

单元格实施

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)
}

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

enter image description here

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

self.height.constant = 200.0

内部单元格实现是警告的原因。

然而,我发现它只发生在给定单元格的第一次点击中,在初始点击后我可以多次点击,每次扩展和关闭它,并且不会发出警告。我是否应该关心此运行时警告?

修改

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

enter image description here

值得一提的是我利用

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

viewController

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

但是,由于这个答案https://stackoverflow.com/a/30333810/4286947 我将其设置为999,这就是这里的解决方案