gpt4 book ai didi

iphone - heightForRowAtIndexPath 总是调用两次

转载 作者:行者123 更新时间:2023-12-03 20:16:25 26 4
gpt4 key购买 nike

我很难理解 UITableViewController 的流程。基本上这是我的结构:

我有一个tableViewController,它当然包含一个tableView。在这里,我使用 getCellContentView 和 cellForRowAtIndexPath 来完成与我的单元格相关的所有工作。我的单元格有一些带有自己的框架的 UILabels,每个方向一个。我检测并正确执行所有方向变化和框架重绘。那里没有问题。到目前为止一切顺利。

现在我需要 heightForRowAtIndexPath 返回 100(横向)和 200(纵向)。我的问题是,当我在其中使用 NSLog 时,当我旋转 tableView 时,无论出于何种原因,该方法都会被调用两次。有人知道为什么该方法在轮换时被触发两次吗?我认为 -reloadData 可能是问题所在,我验证了我是否以某种方式在轮换上调用了 -reloadData 两次,但没有。我仅在 willRotateToInterfaceOrientation 方法内部调用 -reloadData 一次,并且在代码中的其他地方都没有调用它(除了第一个 viewDidLoad 调用内部)。

为什么 heightForRowAtIndexPath 在每个旋转事件上被调用两次?当旋转开始时,heightForRowAtIndexPath 似乎也无法正确确定方向。我使用状态栏方向属性来检查 heightForRowAtIndexPath 内部是否返回适当的单元格高度。任何帮助都会很棒!

最佳答案

谁在乎它被调用了多少次:)

您的 heightForRowAtIndex: 实现应该足够快,以便 TableView 可以随时调用它,而这并不重要。

但是,如果我不得不推测,旋转是分两个阶段完成的(请参阅 UIViewController 文档中的 didAnimateFirstHalfOfRotationToInterfaceOrientation: 等。)您不知道 UIKit 的 UITableViewController 类在旋转期间做了什么 - 也许它正在刷新表格你会看到它自己吗?

您是否尝试过重写 willRotateToInterfaceOrientation: ,它应该为您提供旋转方向 - 您可以使用它来设置所需的单元格高度吗?

类似这样的东西:(警告,未经测试,凭内存输入!)

- (NSInteger)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
return rowHeight;
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];

rowHeight = (UIInterfaceOrientationPortrait == interfaceOrientation) ? 100 : 200;
[tableView reloadData];
}

关于iphone - heightForRowAtIndexPath 总是调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462501/

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