如何在不违反AutoLayout约束的情况下隐藏UITableViewCells

时间:2016-07-29 12:34:38

标签: ios iphone swift uitableview autolayout

我目前正在开发一款应用程序来学习iOS编程和Swift。我有一个包含两个主要子视图的视图,一个MKMapView和一个UITableView。当在MapView中选择某个注释时,我希望隐藏TableView中的某些单元格。如果取消选择注释,则应重新出现单元格。目前我通过将要隐藏的单元格的高度设置为0并调用tableView.beginUpdates() tableView.endUpdates()来实现此目的,但是这会导致我的自定义单元格中的各种AutoLayout约束中断。我还尝试在将高度设置为0之前将单元格上的隐藏属性设置为true,但AutoLayout约束仍然被破坏。

这样做的正确方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:4)

我的2美分:只是尝试将其中一个冲突约束的优先级降低到较低的值,例如UILayoutPriorityDefaultHigh(如果在Interface Builder中使用750)或更低,则取决于您的单元格的组成方式。 应该足以为自动布局系统提供关于可以安全地破坏哪个约束的提示。可能你会想要打破定义距下边距的距离的约束。

答案 1 :(得分:1)

如下所示实施heightForRowAtIndexPath:。您还需要将高度约束设置为0

Objc version

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (shouldHideCell)
        return 0;
    }
    else {
        return UITableViewAutomaticDimension;
    }
}

Swift版

     override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
  if shouldHideCell {
            return 0
        } else {
            return UITableViewAutomaticDimension
        }
  }