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