【问题标题】:Views converted to ios7 flow under navigation/bottom bars in ios6在 ios 6 的导航/底栏下转换为 ios 7 的视图
【发布时间】:2013-09-22 01:48:18
【问题描述】:

我有一个使用故事板、导航控制器和自动布局的应用程序,在 io6 下运行良好,我希望能够在 ios6 和 ios7 下运行。

我已经使用 xcode5 转换了应用程序,它现在在 ios7 下运行良好,但是当我在 ios 6 下运行它时,导航栏和底部栏现在是透明的(它们最初不是)并且视图在它们下面流动 - 隐藏了一些的控件。即使我将 ios7 应用程序转换为不在这些栏下流动(通过设置 Extend Edges / Under Top Bars 和 Under Bottom Bars OFF),这种情况仍然存在。

我已经解决了这个问题,允许 ios7 在条形图下流动视图(Apple 无论如何都希望我们这样做),然后将以下代码添加到第一个视图控制器的 viewDidLoad 方法中,以强制 ios6 不使用透明条形图.

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
    self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
    self.navigationController.toolbar.barStyle = UIBarStyleBlackOpaque;
}

这似乎有效,但我不明白为什么我需要这样做,我担心我缺少一些基本的东西。

编辑:我对这个“解决方案”的另一个担忧是,在 ios6 下的 xcode5 中的预览不能准确反映布局,因为它在 ios 6 下的模拟器下运行(我没有手边真正的 ios6 设备此刻测试它)。 xcode5 中的新预览功能似乎假设 ios 6 不会在顶部和底部栏下流动视图,因此会将控件挤压在一起以适应可用空间。

阿里

【问题讨论】:

    标签: ios


    【解决方案1】:

    不管操作系统版本如何,都试试这个(它最近解决了我一个类似的问题):

    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.toolbar.translucent = NO;
    

    【讨论】:

    • 好的,我可以看到这有点整洁。但是我仍然很好奇为什么我们必须这样做?它是 xcode5 中的错误吗?
    • 可能是一个错误,但我宁愿说这是在以前的 iOS 版本中以相同方式实现的未定义行为之一,但在 iOS 7 中突然发生了变化。
    【解决方案2】:

    我不确定这是否会对您有所帮助,但对于您的情况还有另一种选择:尝试使用 __IPHONE_6_1 宏。我有一个例子:

    if(__IPHONE_7_0) {
        NSLog(@"Hello");
    }
    

    所以你可以这样做

    if(__IPHONE_OS_VERSION_MAX_ALLOWED <= __IPHONE_6_1) {
          self.navigationController.navigationBar.translucent = NO;
          self.navigationController.toolbar.translucent = NO;
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多