gpt4 book ai didi

xcode - iOS 8 Xcode6 heightForRowAtIndexPath 调用了额外的时间

转载 作者:行者123 更新时间:2023-12-03 23:42:47 26 4
gpt4 key购买 nike

我刚刚下载了 Xcode6 Beta6,发现我的 App 有一些奇怪的缺陷。经过一些初步调试,我发现 heightForRowAtIndexPath被多次调用并造成一些不良影响。

通常,我希望 heightForRowAtIndexPath比我显示的行多调用 2 次。所以当我硬编码 numberOfRowsInSection返回 3,我应该看到 heightForRowAtIndexPath被叫了5次。在 iOS 7 中就是这种情况,但是当我在 Xcode6 Beta6 中进行测试时,我看到了 heightForRowAtIndexPath被叫了7次。当我返回 4 时,该方法被称为 9、5 和它的 11。所以看起来模式是我硬编码的行数 + 1 的两倍。

有没有其他人遇到过这个问题或找到解决方法?仅仅能够确认这是一个 iOS 错误将是一个巨大的帮助,因为这样我就可以将这个缺陷推迟到以后,因为 Apple 可能会自己解决这个问题。

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

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

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



我想我们只需要处理这个问题,并且应该编码不依赖于这个委托(delegate)被调用的确切时间。

最佳答案

从 iOS 8 开始,Apple 改变了他们决定 table view 内容大小的方式。这是为了进一步优化它,让我们在 table 设计上更有活力。

作为其中的一部分,他们现在不再一次调用所有行的 heightForRowAtIndex 路径,而是只需调用它任意多次以确定内容大小。内容大小的确定也是动态的,因此需要多次调用。

不要在 heightForRowAtIndexPath 方法中进行任何高度计算。而是编写一个私有(private)方法,并将其视为过去的 heightForRowAtIndexPath。将所有高度存储在字典中,以 NSIndexPath 对象作为键。

当然,这意味着如果数据已更改,则在调用 reloadData 之前调用此私有(private)方法。

关于xcode - iOS 8 Xcode6 heightForRowAtIndexPath 调用了额外的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25436500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com