什么时候设置更改 heightForRowAt UITableView 动画被破坏

Posted

技术标签:

【中文标题】什么时候设置更改 heightForRowAt UITableView 动画被破坏【英文标题】:When did set change heightForRowAt UITableView animation is broken 【发布时间】:2019-02-11 12:03:31 【问题描述】:

什么时候设置改变 heightForRowAt UITableView 动画是破碎的单元格是跳跃的。如果选择最后一行并在顶部滚动,点击折叠行后,表格会向上跳。动画坏了。

override func viewDidLoad() 
    super.viewDidLoad()
    tableView.delegate = self
    tableView.dataSource = self
    tableView.estimatedRowHeight = 300

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    return conditionData[indexPath.section].conditions?[indexPath.row].selected ?? false ? 300 : 76


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    conditionData[indexPath.section].conditions?[indexPath.row].selected = true
    tableView.beginUpdates()
    let cell = tableView.cellForRow(at: indexPath) as? ConditionsCell
    cell?.setSelected(true, animated: true)
    tableView.endUpdates()


func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 
    conditionData[indexPath.section].conditions?[indexPath.row].selected = false
    tableView.beginUpdates()
    let cell = tableView.cellForRow(at: indexPath) as? ConditionsCell
    cell?.setSelected(false, animated: true)
    tableView.endUpdates()

【问题讨论】:

在展开另一个单元格时,您是否正在折叠展开的单元格? 如果在 tableView.beginUpdates() 之前添加 UIView.setAnimationsEnabled(false) 并设置 true 如何 endUpdates。调整单元格行高时我丢失了所有动画。 tableView 是否将allowsMultipleSelection 设置为true? 是的,我设置了allowsMultipleSelection = true 【参考方案1】:

当我开始使用这种方法时,动画看起来非常好。

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
    return conditionData[indexPath.section].conditions?[indexPath.row].selected ?? false ? 300 : 76

【讨论】:

以上是关于什么时候设置更改 heightForRowAt UITableView 动画被破坏的主要内容,如果未能解决你的问题,请参考以下文章

将多行的 heightForRowAt indexPath 设置为 0

indexpath.row 在tableView heightForRowAt 3 后重置

在 heightForRowAt IndexPath 之后 UITableViewCell 的层没有得到更新

为啥在 heightForRowAt 方法中我的单元格为零?

EXC_BAD_ACCESS 在 heightForRowAt 内时

RxSwift + UITableViewCell 如何在 heightForRowAt 中获取单元格对象