【问题标题】:iOS Truncated Views while rotating, have to reset view.boundsiOS 在旋转时截断视图,必须重置 view.bounds
【发布时间】:2012-10-17 17:04:56
【问题描述】:

我最近一直在为应用添加对旋转的支持,这很痛苦。我发现一直很烦人的一件事是,每次我在横向和纵向模式之间旋转时,我的一个视图都会向上移动大约 50 像素左右。

我的横向模式实际上不是同一个视图控制器;当我旋转时,我推动了一个视图控制器。但是,当我向后旋转时,我必须重置肖像的 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);
        }
    }
}

这肯定是不对的。在我的应用程序中,有一个导航栏和标准状态栏(电池寿命、接收等)占据了我的应用程序的顶部。但是……除非我将 y 坐标原点设置为负数(这没有任何意义!),否则我的观点似乎太向上滑动了。

发生了什么事?

【问题讨论】:

    标签: ios uiview rotation uinavigationbar


    【解决方案1】:

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

    当我从横向模式转换回纵向模式时,横向视图控制器会弹出,我会看到奇怪的变化视图。原来这是由标签/导航栏取消隐藏语句的顺序引起的。

    我的标签/导航栏取消隐藏语句位于纵向视图控制器中,因此调用它们为时已晚。将选项卡/导航取消隐藏语句移动到横向视图控制器(而不是纵向视图控制器)中的旋转代码后,我的问题就消失了。

    【讨论】:

    • 但请注意,如果您是针对 iOS 6 编译并在 iOS 6 上运行,这是错误的,因为旋转和布局现在是两个不同的东西。您需要在布局或 updateConstraints 期间使用约束和/或进行更改,而不是响应旋转事件。
    • 按照自动布局或其他方式布局?我没有为我的应用程序使用自动布局。我会查一下 updateConstraints 的作用。
    • 即使你没有使用自动布局,在 iOS 6 中布局你的界面的关键时刻是 UIViewController 的 viewWillLayoutSubviews 和 UIView 的 layoutSubviews。旋转事件用于与旋转相关的动画,仅此而已。 Apple 已在 WWDC 2012 视频中明确警告过这一点。
    • 我是 iOS 开发新手。这些 WWDC 视频到底是什么?每个 iOS 开发者都必须看到它们吗?
    • 我当然这么认为!他们经常提供文档中没有的信息(尤其是理解方式和使用细节、事物如何连接在一起、提示和技巧等)。 developer.apple.com/videos
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多