旋转时iOS截断视图,必须重置view.bounds

时间:2012-10-17 17:04:57

标签: ios uiview rotation uinavigationbar

我最近一直在为应用程序添加旋转支持并且一直很痛苦。我发现一件令人讨厌的事情是,每当我在横向和纵向模式之间旋转时,我的一个视图会向上移动大约50个像素。

我的横向模式实际上并不是同一个视图控制器;我旋转时按下一个viewcontroller。然而,当我向后旋转时,我必须重置肖像的视图。然后我的视图最终会向上移动。

所以在我的轮换代码中,我必须这样做:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    UIInterfaceOrientation toOrientation = self.interfaceOrientation;

    if ( self.tabBarController.view.subviews.count >= 2 )
    {
        if(toOrientation == UIInterfaceOrientationPortrait)
        {
            self.tabBarController.tabBar.hidden = NO;
            self.navigationController.navigationBar.hidden = NO;
            CGFloat height = [[UIScreen mainScreen] bounds].size.height;
            CGFloat width = [[UIScreen mainScreen] bounds].size.width;
            self.view.bounds = CGRectMake(0, -55, width, height);
        }
    }
}

当然这不可能是对的。在我的应用程序中,有一个导航栏和标准状态栏(batt生活,接待等)占据我的应用程序的顶部。但是......除非我将y坐标原点设置为负值(这没有任何意义!),我的视图似乎正在向上滑动。

发生了什么事?

1 个答案:

答案 0 :(得分:0)

在我的应用中,当我进入横向模式时,我会隐藏标签栏和导航栏。隐藏条形的语句被写入纵向视图的viewcontroller代码。

当我从横向模式转换回纵向模式时,横向视图控制器会弹出,我会得到奇怪的移位视图。事实证明这是由选项卡/导航栏取消隐藏语句的顺序引起的。

我的标签/导航栏隐藏语句位于纵向视图控制器中,因此它们被调用太晚了。将tab / nav un-hiding语句移动到landscape viewcontroller(而不是portrait的viewcontroller)中的旋转代码后,我的问题就消失了。