【问题标题】:iOS7 Status Bar over Navigation Bar导航栏上的 iOS7 状态栏
【发布时间】:2013-09-14 18:17:14
【问题描述】:

我正在使用 iOS7 测试我的应用程序,但我遇到了状态栏问题。基本上状态栏出现在导航栏上,如下图所示:

我尝试拨打我的viewDidLoad

 self.edgesForExtendedLayout = UIRectEdgeNone;
 self.automaticallyAdjustsScrollViewInsets = YES;

没有成功。

我还添加到info.plist 文件UIViewControllerBasedStatusBarAppearance 没有运气。

主要问题是应用程序必须与 iOS6 和 iOS7 兼容,目前在 iOS7 上,视图从顶部移动了 20px。

【问题讨论】:

  • 可能你使用的是半透明的导航栏
  • 我也有这个问题stackoverflow.com/questions/18737186/…,在阅读了 Aaron 的以下答案后,它给了我一个想法,它奏效了。将在下面发布我的答案
  • 你的状态栏可以用黑色半透明吗?
  • 我在向客户端交付构建时也遇到了同样的问题。我使用 xcode 4.6 编译项目并在 IOS 7 设备上安装了相同的 ipa。客户对解决方案很满意 :)

标签: iphone objective-c ios6 ios7 xcode5


【解决方案1】:

edgesForExtendedLayoutautomaticallyAdjustsScrollViewInsets 只是父视图控制器如何布局/管理视图的标准。看起来您使用的是 UINavigationBar,而不是 UINavigationController,这意味着除非您将这些属性编码为,否则这些属性不会做任何事情。

您可以切换到使用 UINavigationController,或者您可以在 iOS 7 上以编程方式将 UINavigationBar 的高度从 44 更改为 64。

【讨论】:

    【解决方案2】:

    向 UINavigationBar 添加一个出口。

    float currentVersion = 7.0;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= currentVersion) {
        // iOS 7
        self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 64);
    }
    

    您还可以隐藏状态栏,这可能是在这些视图上获得更多屏幕空间的更好方法。

    我在这里回答:

    Position of navigation bar for modal view - iOS7

    【讨论】:

    • 经过一些测试,我决定在iOS7中隐藏状态栏
    • 这也是我所做的。确保为 iOS7 执行此操作,在 plist 中查看基于控制器的状态栏外观 = NO。
    【解决方案3】:

    这是 iOS 7 带来的最大问题,有很多解决方案可以解决这个问题,但在我看来,最好的解决方法是移除导航栏并将视图控制器嵌入到导航控制器中,方法是转到编辑器> 嵌入导航控制器。

    【讨论】:

      【解决方案4】:

      将约束顶部空间添加到顶部布局指南

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-29
        • 2014-02-07
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2013-10-04
        • 2014-11-18
        • 1970-01-01
        相关资源
        最近更新 更多