heightForRowAtIndexPath总是被调用两次

时间:2010-12-16 15:39:17

标签: iphone ipad uitableview

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

我有一个tableViewController,它当然包含一个tableView。在这里,我使用getCellContentView和cellForRowAtIndexPath来完成与我的单元格相关的所有工作。我的手机有几个带有自己框架的UILabel,每个方向一个。我检测并执行所有方向更改并正确地重绘帧。没问题。到目前为止一切都很好。

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

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

1 个答案:

答案 0 :(得分:0)

谁在乎它被召唤的次数:)

你对h​​eightForRowAtIndex的实现应该足够快,以至于表视图可以随时调用它并且无关紧要。

但是,如果我不得不推测,旋转分两个阶段完成(在UIViewController文档中查看didAnimateFirstHalfOfRotationToInterfaceOrientation:等等。)你不知道在rotatino期间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];
}