iOS截断视图旋转时,必须重置view.bounds
最近,我一直在为一个应用程序添加对轮换的支持,这让我很痛苦。有一件事我一直觉得很烦人,那就是每次我在横向模式和纵向模式之间旋转时,我的一个视图都会向上移动大约50像素 我的横向模式实际上不是同一个视图控制器;我在旋转时推动viewcontroller。但是,当我向后旋转时,我必须重置肖像的view.bounds,否则我的视图最终会向上移动 所以在我的轮换代码中,我必须这样做:iOS截断视图旋转时,必须重置view.bounds,ios,uiview,rotation,uinavigationbar,Ios,Uiview,Rotation,Uinavigationbar,最近,我一直在为一个应用程序添加对轮换的支持,这让我很痛苦。有一件事我一直觉得很烦人,那就是每次我在横向模式和纵向模式之间旋转时,我的一个视图都会向上移动大约50像素 我的横向模式实际上不是同一个视图控制器;我在旋转时推动viewcontroller。但是,当我向后旋转时,我必须重置肖像的view.bounds,否则我的视图最终会向上移动 所以在我的轮换代码中,我必须这样做: -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrienta
-(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 life、receipt等占据了我应用程序的顶部。但是…我的观点似乎太向上滑动了,除非我将y坐标原点设置为负,这是没有意义的
发生了什么事?在我的应用程序中,当我进入横向模式时,我会隐藏选项卡栏和导航栏。使条形图隐藏的语句将写入纵向视图的viewcontroller代码中 当我从横向模式转换回纵向模式时,横向视图控制器弹出,我得到奇怪的移动视图。结果表明,这是由tab/nav bar取消隐藏语句的顺序造成的
我的tab/nav bar un HIGHTING语句在纵向视图控制器中,因此调用它们为时已晚。将tab/nav un HIGHTING语句移动到横向视图控制器(而不是纵向视图控制器)中的旋转代码后,我的问题消失了。但请注意,如果您是根据iOS 6编译并在iOS 6上运行,这是错误的,因为旋转和布局现在是两件不同的事情。您希望在布局或UpdateConstraint期间使用约束和/或进行更改,而不是响应旋转事件。是否按自动布局或其他方式进行布局?我没有为我的应用程序使用自动布局。我将查看updateConstraints的功能。即使您没有使用autolayout,在iOS 6中布局界面的关键时刻是UIViewController的ViewWillLayoutSubview和UIView的LayoutSubview。旋转事件用于与旋转相关的动画,而不是其他。苹果在2012年WWDC视频中明确警告了这一点。我对iOS开发还不熟悉。这些WWDC视频到底是什么?它们是每个iOS开发者都必须看到的吗?我当然这么认为!他们经常提供文档中没有的信息,特别是理解和使用细节的方式、事物如何连接在一起、提示和技巧等。