我最近一直在为应用程序添加旋转支持并且一直很痛苦。我发现一件令人讨厌的事情是,每当我在横向和纵向模式之间旋转时,我的一个视图会向上移动大约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坐标原点设置为负值(这没有任何意义!),我的视图似乎正在向上滑动。
发生了什么事?
答案 0 :(得分:0)
在我的应用中,当我进入横向模式时,我会隐藏标签栏和导航栏。隐藏条形的语句被写入纵向视图的viewcontroller代码。
当我从横向模式转换回纵向模式时,横向视图控制器会弹出,我会得到奇怪的移位视图。事实证明这是由选项卡/导航栏取消隐藏语句的顺序引起的。
我的标签/导航栏隐藏语句位于纵向视图控制器中,因此它们被调用太晚了。将tab / nav un-hiding语句移动到landscape viewcontroller(而不是portrait的viewcontroller)中的旋转代码后,我的问题就消失了。