代码之家  ›  专栏  ›  技术社区  ›  Ali Beadle

在ios6中的导航/底部栏下转换为ios7流的视图

ios
  •  2
  • Ali Beadle  · 技术社区  · 13 年前

    我有一个应用程序,它使用stroryboard、导航控制器和自动布局,在io6下运行良好,我想启用它在ios6和ios7下运行。

    我已经使用xcode5转换了该应用程序,它现在在ios7下运行良好,但当我在ios6下运行它时,导航栏和底部栏现在是透明的(它们最初不是透明的),视图在它们下面流动-隐藏了一些控件。即使我将ios7应用程序转换为不在这些条下流动(通过将“延伸边缘/顶部条下”和“底部条下”设置为OFF),这种情况也会持续存在。

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

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

    这似乎奏效了,但我不明白为什么我需要这样做,我担心我错过了一些基本的东西。

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

    阿里

    2 回复  |  直到 13 年前
        1
  •  4
  •   Tamás Zahola    13 年前

    无论操作系统版本如何,都可以尝试此操作(它最近解决了我的一个类似问题):

    self.navigationController.navigationBar.translucent = NO;
    self.navigationController.toolbar.translucent = NO;
    
        2
  •  0
  •   user2277872    13 年前

    我不确定这是否会对您有所帮助,但对于您的情况还有另一个选择:尝试使用__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;
    }
    

    希望这对你有帮助