使用Swift隐藏取消隐藏静态表视图单元格

时间:2016-03-05 11:41:24

标签: ios uitableview swift2

我正在尝试制作一张静态表''''''''''''一些可扩展和折叠的细胞。我覆盖了'':WithAnimation:)''''这应该为我提供动画过渡的一些控制。不幸的是,返回的细胞是空白的,我不是空的,但细胞已经消失,它们的位置在表格中留下了空白。当我尝试使用''' reloadSections()'''相反,整个部分也返回空白。经过一些回顾,我开始怀疑''' reloadRowAtIndexPath(:WithAnimation :)''''和''' reloadSections()''''适用于与数据源关联的表。 我对吗?如果是,我如何控制要隐藏/取消隐藏的单元格的动画,以便过渡顺利? 谢谢(已编辑)

2 个答案:

答案 0 :(得分:1)

要获得流畅的动画,只需使用

重新加载tableView即可
tableView.beginUpdates()
tableView.endUpdates()

这将自动调用heightForRowAtIndexPath并呈现平滑过渡。

答案 1 :(得分:1)

扩展irkinosor的答案。在这个例子中,我有1个部分,有3个静态行。最初加载tableView时,我的UISwitch关闭,我只希望第一行(第0行)可见(隐藏第1,2行)。当UISwitch打开时,我想显示(第1,2行)。另外,我希望平滑动画有行手风琴隐藏或显示。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if indexPath.row > 0 && toggleSwitch.isOn == false {
        return 0.0  // collapsed
    }
    // expanded with row height of parent
    return super.tableView(tableView, heightForRowAt: indexPath)
}

在我的切换操作中,我启动了tableView refresh

@IBAction func reminderSwitch(_ sender: UISwitch) {
    // to initiate smooth animation
    tableView.beginUpdates()
    tableView.endUpdates()
}

如果您有多个部分和更有趣的行要求,显然可以为heightForRowAt函数添加更多逻辑。