应一个群朋友的要求,想实现如下图这种的效果:
问题:点击cell,然后根据cell内部出来的view的高度来动态改变当前的点击的cell的高度。
解决思路:
- 点击cell的时候会弹出一个contentView,根据数据,获取这个contentView的高度。为了实现刷新的动画效果,接下来的cell的高度变化都在
1 | [tableView beginUpdates]; |
上面这个代码块之间执行。
- 当contentView以动画的形式出现的时候,先展示contentView,然后再改变cell的高度
- 当contentView消失的时候,先将contentView消失,然后再刷新这一行的高度
- 在返回cell高度的方法中,根据contentView是否显示而显示不同的高度。
现在cell高度计算,都会先给一个预估高度,这样代理方法就不会一开始走
heightForRowAtIndexPath
这个方法,会先走cellForRowAtIndexPath
这个方法,这样的话,当cell显示的时候才去调用heightForRowAtIndexPath
方法,此时cell已经创建成功了。这样就可以在这个方法里通过cellForRowAtIndexPath
来获取cell了,相比从前,计算cell高度简单多了。
最后简单的模拟了一下不同cell的高度,实现的效果如下图:
核心代码:
1 |
|
demo地址:git传送门