iOS 8 Xcode6 heightForRowAtIndexPath被称为额外的次数

前端之家收集整理的这篇文章主要介绍了iOS 8 Xcode6 heightForRowAtIndexPath被称为额外的次数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚下载了 Xcode6 Beta6,并在我的应用程序中发现了一些奇怪的缺陷.经过一些初步的调试,我发现heightForRowAtIndexPath被称为多次额外的时间,并造成一些不良影响.

通常我希望heightForRowAtIndexPath被称为比我显示的行多2次.所以当我对numberOfRowsInSection进行硬编码返回3时,我应该看到heightForRowAtIndexPath被调用5次.在iOS 7中就是这样,但是当我在Xcode6 Beta6中测试时,我看到heightForRowAtIndexPath被调用了7次.当我返回4时,该方法被称为9,5及其11.所以似乎模式是我正在硬编码的行数的两倍.

有没有人遇到这个问题或找到解决办法?只要能够确认这是一个iOS错误将是一个巨大的帮助,因为我可以推迟的缺陷,因为苹果可能会自己解决这个问题.

编辑:Xcode 6 GM中仍然存在此问题

编辑2:苹果回应并关闭了我的错误报告,这里有回应:

The API contract of a delegate is that we can call this method as much as we want.

我想我们只需要处理这个,并且应该代码不要完全依赖这个委托被调用.

解决方法

iOS 8以后,苹果已经改变了他们决定表格视图内容大小的方式.这是为了进一步优化它,使我们能够在表格设计中有更多的活力.

作为其中的一部分,他们现在不再在一次镜头中为所有行调用heightForRowAtIndex路径,而是只需调用它们多次,以确定内容大小.内容大小确定也已经形成一种动态,因此多次呼叫.

不要在heightForRowAtIndexPath方法中做任何高度计算.而是写一个私有方法并将其视为过去的heightForRowAtIndexPath.将关于NSIndexPath对象的所有高度存储在字典中.

当然,这意味着在调用reloadData之前调用这个私有方法,如果数据已经改变了.

猜你在找的iOS相关文章