设备旋转后,我在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;
}
答案 0 :(得分:0)
我没有明确的答案,但这里有几点需要考虑:
1)你为什么要在tableView:heightForRowAtIndexPath中调用[self.tableview setNeedsDisplay]?如果你需要在这里重置显示,你的整体逻辑可能有问题。
2)将计算代码移出到didRotateFromInterfaceOrientation:方法怎么样?完成后调用reloadData。将高度存储在实例变量中,然后在tableView中返回:heightForRowAtIndexPath:。
2)此代码在轮换后运行。尝试注销不同的常量并手动仔细检查数学。这可能会让您更好地了解正在发生的事情。可能存在计时问题 - 例如,您可能在轮换发生之前获取状态栏高度,而不是在它发生之后。