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

上一篇: Incorrect row height returned when iOS device rotated

下一篇: Vertical UIToolBar and also its UIBarButtonItem