iOS设备旋转时返回的行高不正确
一旦设备旋转,我在UITableView中显示具有正确高度的UITableViewCells时遇到问题。 表格视图最初加载时,所有行都具有正确的大小,如下图所示:
但是,当我将设备旋转到横向模式时,我得到的行数比我想要的要短,因此,视图的背景部分是可见的,请参阅此处:
当再次将手机重新转换为肖像模式时,行大小会比第一次加载视图时大,因此,底部单元格看起来更小,并且文本看起来不在单元格中央,请参阅此处:
这是我用于行高计算的方法和变量:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
CGFloat statusBarWidth = [UIApplication sharedApplication].statusBarFrame.size.width;
CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
CGFloat rowHeight;
NSUInteger numberOfRows = self.orderedCategories.count;
if (orientation == UIDeviceOrientationPortrait) {
rowHeight = ((screenHeight - navigationBarHeight - statusBarHeight) / numberOfRows);
NSLog(@"portrait: %f", rowHeight);
} else {
rowHeight = ((screenWidth - navigationBarHeight - statusBarWidth) / numberOfRows);
NSLog(@"landscape: %f", rowHeight);
}
return rowHeight;
}
我没有一个明确的答案,但这里有几件事要考虑:
1)你为什么要在tableView中调用[self.tableview setNeedsDisplay]:heightForRowAtIndexPath? 如果您需要在此重置显示器,则整体逻辑可能有问题。
2)如何将计算代码移出到didRotateFromInterfaceOrientation:方法? 然后在完成后调用reloadData。 将高度存储在实例变量中,并将其返回到tableView:heightForRowAtIndexPath :.
2)这段代码是否在循环后运行。 尝试注销不同的常量,然后手动检查数学。 这可以让你更好地了解发生了什么。 可能存在计时问题 - 例如,您可能在旋转发生之前获取状态栏高度,而不是在发生之后。
链接地址: http://www.djcxy.com/p/58383.html