什么时候设置更改 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 方法中我的单元格为零?