从UITableView中删除以编程方式自定义的UITableViewCell时,约束会中断

时间:2018-10-14 14:56:23

标签: ios swift uitableview autolayout

我正在使用UITableViewController,并且正在加载自定义的UITableViewCell。单元中的所有元素和约束均以编程方式配置。 TableView看起来像这样

enter image description here 除删除单元格外,其他所有选项均正常运行。我将tableView配置为在删除时淡化单元格。但是,该单元格有点急动,然后向左移动而不是褪色,并且我在控制台中收到自动布局错误消息:

下方为“无法同时满足约束条件”
"<NSLayoutConstraint:0x600002551a40 UIView:0x7fccbd5286f0.height == 100   (active)>",
"<NSLayoutConstraint:0x6000025505a0 V:|-(16)-[UIView:0x7fccbd5286f0]   (active, names: '|':UITableViewCellContentView:0x7fccbd541b10 )>",
"<NSLayoutConstraint:0x600002550730 UIView:0x7fccbd5286f0.bottom == UITableViewCellContentView:0x7fccbd541b10.bottom   (active)>",
"<NSLayoutConstraint:0x6000025605a0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fccbd541b10.height == 1.19209e-07   (active)>"

及以下

"<NSLayoutConstraint:0x6000025505a0 V:|-(16)-[UIView:0x7fccbd5286f0]   (active, names: '|':UITableViewCellContentView:0x7fccbd541b10 )>",
"<NSLayoutConstraint:0x600002550730 UIView:0x7fccbd5286f0.bottom == UITableViewCellContentView:0x7fccbd541b10.bottom   (active)>",
"<NSLayoutConstraint:0x6000025605a0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fccbd541b10.height == 1.19209e-07   (active)>"

以及下面的“将尝试通过打破约束来恢复”

<NSLayoutConstraint:0x600002551a40 UIView:0x7fccbd5286f0.height == 100   (active)>
<NSLayoutConstraint:0x600002550730 UIView:0x7fccbd5286f0.bottom == UITableViewCellContentView:0x7fccbd541b10.bottom   (active)>
  

我将控制台输出分成几部分,因为由于某种原因无法将它们全部粘贴在一起。

基本上,我在单元格UIView内有一个名为cellView(白角圆角区域)的contentView。您看到的所有其他元素都在cellView内部。我在cellViewcontentView

之间应用了以下约束
cellView.translatesAutoresizingMaskIntoConstraints = false
cellView.heightAnchor.constraint(equalToConstant: 100).isActive = true
cellView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 16.0).isActive = true
cellView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor).isActive = true
cellView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 16.0).isActive = true
cellView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -16.0).isActive = true

当我尝试在删除单元格之前停用单元格及其子视图中的所有约束时,此方法起作用。但是,当新单元被重用时,它们没有激活限制。

该如何处理?

1 个答案:

答案 0 :(得分:7)

您需要降低底部约束的优先级

let con = cellView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor)  
con.priority = UILayoutPriority(999)
con.isActive = true