Iphone heightForRowAtIndexPath始终调用两次

Iphone heightForRowAtIndexPath始终调用两次,iphone,ipad,uitableview,Iphone,Ipad,Uitableview,我很难理解UITableViewController的流程。基本上我的结构如下: 我有一个tableViewController,它当然包含一个tableView。在这里,我使用getCellContentView和CellForRowatineXpath来完成与我的单元格相关的所有工作。我的单元有几个UILabel,它们有自己的框架,每个方向一个。我检测并正确执行所有方向更改和帧重画。没有问题。到目前为止还不错 现在我需要rowatinexpath的heights返回100表示横向,200表示

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

我有一个tableViewController,它当然包含一个tableView。在这里,我使用getCellContentView和CellForRowatineXpath来完成与我的单元格相关的所有工作。我的单元有几个UILabel,它们有自己的框架,每个方向一个。我检测并正确执行所有方向更改和帧重画。没有问题。到目前为止还不错

现在我需要rowatinexpath的heights返回100表示横向,200表示纵向。我的问题是,当我在其中记录NSLog时,当我旋转tableView时,无论出于何种原因,该方法都会被调用两次。有人知道为什么该方法在旋转时发射两次吗?我认为-reloadData可能是问题所在,我验证了我是否在旋转时调用了-reloadData两次,但没有。我在willRotateToInterfaceOrientation方法中只调用了一次-reloadData,代码中没有调用过它(除了第一次viewDidLoad调用)


为什么每次旋转事件都会调用HeightForRowatineXpath两次?旋转开始时,RowAtIndexPath的高度似乎也无法正确确定方向。我使用statusbar方向属性检查inside heightForRowAtIndexPath以返回适当的单元格高度。任何帮助都会很棒

谁在乎它被呼叫了多少次:)

HeightForRowatinex:的实现应该足够快,以便表视图可以随时调用它,而这并不重要

然而,如果我不得不推测,一个旋转是分两个阶段完成的(看看UIViewController文档中的DidAnimateFirsthalfoFrotationInterfaceOrientation:etc)。你不知道UIKit的UITableViewController类在旋转过程中做了什么-也许它正在为你刷新表视图本身

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

类似这样的内容:(警告,未测试,并从内存中键入!)


deanWombourne先生,我爱你!工作!现在,我正在阅读旋转内部的内容,以便真正弄清楚为什么表会呈现两次(就像进行了两次重载数据调用一样)。
- (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];
}