旋转视图时如何在ios 7中停止状态栏覆盖ping

Posted

技术标签:

【中文标题】旋转视图时如何在ios 7中停止状态栏覆盖ping【英文标题】:How to stop statusbar overlayping in ios 7 when rotating view 【发布时间】:2013-10-11 13:43:52 【问题描述】:

我正在为 ios 7 进行兼容性修改。我的应用程序视图正在为横向和便携模式旋转。

但目前在 ios 7 中,状态栏正在覆盖我的视图。在所有旋转中。我尝试了以下代码,但它对我不起作用。

在我的 appDelegate 文件 appdidfinishlaunching 中,我设置了 1 个通知,如下所示:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
        [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
                                                   object:nil];
   

这样会冷的方法如下:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification


    int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue];
    int w = [[UIScreen mainScreen] bounds].size.width;
    int h = [[UIScreen mainScreen] bounds].size.height;
    switch(a)
        case 4:
            self.window.frame =  CGRectMake(0,20,w,h);
            break;
        case 3:
            self.window.frame =  CGRectMake(-20,0,w-20,h+20);
            break;
        case 2:
            self.window.frame =  CGRectMake(0,-20,w,h);
            break;
        case 1:
            self.window.frame =  CGRectMake(20,0,w-20,h+20);
    


当我第一次启动我的应用程序状态栏时,我的视图被覆盖了。 第二次当我旋转我的 iPad 时,它会在不同的位置设置状态栏黑色地面。 每次我都错了。

请帮助我,我在上面做错了什么吗?

如果可能,请为我提供所有旋转以停止状态栏覆盖的示例代码。

【问题讨论】:

【参考方案1】:

您可以使用此代码阻止导航栏重叠

self.navigationController.navigationBar.translucent = NO;

【讨论】:

你认为 OP 为什么使用 UINavigationController? @adam 我没有使用导航控制器我只想计算高度和宽度以及 x,y 并根据 ios 7 设置视图的框架,它可以在所有旋转上工作。

以上是关于旋转视图时如何在ios 7中停止状态栏覆盖ping的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 和 iOS 8 中 UIImagepickercontroller 的相机视图上的状态栏重叠

如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

iOS9用自定义uiwindow覆盖状态栏 - 位置错误

覆盖 UINavigationBar 时 iOS 7 状态栏变黑

IBM Worklight 6.1 - iOS 7 状态栏覆盖 HTML 中的元素

在 iOS 7 中,状态栏出现在我的视图边界上 [重复]