1

这真的很奇怪,我不确定到底发生了什么。

我的 iPad 应用程序上有一个 UISplitViewController。我可以一遍又一遍地从纵向旋转到横向,并且完全按预期工作。但是,如果我处于纵向并且我点击按钮以显示包含 UISplitViewController 左侧的弹出框,然后在可见时旋转,则当旋转完成时,左侧表格现在被推送向下在它和导航栏之间留下一个黑色的间隙。

到底是什么原因造成的?

我已经注释掉了我的-willRotateToInterfaceOrientation:duration-didRotateFromInterfaceOrientation:方法,问题仍然存在,所以它不是由我的轮换代码引起的。(该代码只是明确地取消了该弹出窗口)。

在导致问题的旋转之后,我递归地打印出左侧的视图层次结构以及帧大小:

UILayoutContainerView ({{0, 0}, {320, 748}})
     UINavigationBar ({{0, 0}, {320, 44}})
     UILayoutContainerView ({{0, 37}, {320, 711}})
         UINavigationTransitionView ({{0, 0}, {320, 711}})
             UIViewControllerWrapperView ({{0, 44}, {320, 667}})
                 UIView ({{0, 0}, {320, 667}})
                     UITableView ({{0, 0}, {320, 667}})

它显示导航栏高 44 像素,包含我的左侧视图控制器的视图容器从 0,44 开始,我的表格视图从 0,0 开始,但更短....我不明白为什么无法正确显示。

这是横向方向的外观。在左侧,您会看到表格部分标题“您想知道什么?” 它位于导航栏的正下方,带有“切换到计算器”按钮。

在此处输入图像描述

当我切换到纵向并点击“你想知道什么?” 按钮,弹出框显示其中包含带有 UITableViewController 的左侧导航控制器。

在此处输入图像描述

现在,当我旋转回横向时,导航栏和 UITableView 之间会出现黑色间隙。

在此处输入图像描述

4

1 回答 1

0

我记得去年在开发这个应用程序时遇到了一个与此非常相似的问题,但我找不到任何关于它的旧 StackOverflow 帖子。但是,我记得在纵向模式下我在弹出框内包含导航栏(或者更确切地说,使其可见)是有原因的。出于美学目的,我宁愿让它在横向中可见,但在纵向弹出窗口中不可见.. 然后我记得我包含它的原因是因为它似乎解决了这个问题。

这似乎是 iOS 中的一个奇怪的错误,但显示导航栏两种情况似乎都可以解决它。所以,我决定把它改回我真正想要的样子:横向可见,纵向不可见……还有 BAM。黑色的缝隙消失了。所以,奇怪的错误似乎仍然存在,但它现在正在反向工作。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UIDeviceOrientation deviceOrientation = [UIApplication sharedApplication].statusBarOrientation;
        BOOL isPortrait = UIDeviceOrientationIsPortrait(deviceOrientation);

        if (isPortrait) {
            self.navigationController.navigationBarHidden = YES;
        } else {
            self.navigationController.navigationBarHidden = NO;
        }
    }
}
于 2013-01-30T01:02:38.537 回答