Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS截断视图旋转时,必须重置view.bounds_Ios_Uiview_Rotation_Uinavigationbar - Fatal编程技术网

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

iOS截断视图旋转时,必须重置view.bounds,ios,uiview,rotation,uinavigationbar,Ios,Uiview,Rotation,Uinavigationbar,最近,我一直在为一个应用程序添加对轮换的支持,这让我很痛苦。有一件事我一直觉得很烦人,那就是每次我在横向模式和纵向模式之间旋转时,我的一个视图都会向上移动大约50像素 我的横向模式实际上不是同一个视图控制器;我在旋转时推动viewcontroller。但是,当我向后旋转时,我必须重置肖像的view.bounds,否则我的视图最终会向上移动 所以在我的轮换代码中,我必须这样做: -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrienta

最近,我一直在为一个应用程序添加对轮换的支持,这让我很痛苦。有一件事我一直觉得很烦人,那就是每次我在横向模式和纵向模式之间旋转时,我的一个视图都会向上移动大约50像素

我的横向模式实际上不是同一个视图控制器;我在旋转时推动viewcontroller。但是,当我向后旋转时,我必须重置肖像的view.bounds,否则我的视图最终会向上移动

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

-(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开发者都必须看到的吗?我当然这么认为!他们经常提供文档中没有的信息,特别是理解和使用细节的方式、事物如何连接在一起、提示和技巧等。