在弹出窗口可见时旋转iPad,我的UITableView移动

时间:2013-01-28 23:55:54

标签: ios ipad uisplitviewcontroller

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

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

到底能造成什么?

我已经注释掉了我的-willRotateToInterfaceOrientation:duration-didRotateFromInterfaceOrientation:方法,问题仍然存在,所以它不是由我的轮换代码引起的。 (该代码只是明确地驳回了那个popover)。

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

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开始,我的tableview在0,0开始,但是更短....我不明白为什么它没有正确显示。

以下是横向应该是什么样子。在左侧,您将看到表格标题“您想知道什么?”它位于导航栏的正下方,带有“切换到计算器”按钮。

enter image description here

当我换到纵向方向并点按“你想知道什么?”时按钮,弹出窗口显示包含左侧导航控制器和UITableViewController。

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:0)

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

它似乎是iOS中的一个奇怪的错误,但显示Nav Bar似乎都解决了这个问题。所以,我决定将它改回到我真正想要的方式:在风景中可见,在肖像中看不到......和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;
        }
    }
}