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

问题描述:

我有一个应用程序使用stroryboards,导航控制器和自动布局在io6下运行良好,我希望启用在ios6和ios7下运行。在ios6导航/底部条形图下转换为ios7流的视图

我已经使用xcode5转换了应用程序,它现在可以在ios7下正常运行,但是当我在ios 6下运行它时,导航栏和底部栏现在是透明的(它们本来不是透明的)并且视图在它们下面流动 - 隐藏一些控件。即使我将ios7应用程序转换为不在这些小节下方流动(通过将“延伸边缘”/“下方酒吧”和“下方酒吧”下的“关闭”),此操作仍然存在。

我已经解决了这个问题,它允许ios7在条形图下面传递视图(苹果公司希望我们做的任何事情),然后将以下代码添加到第一个视图控制器的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不会在顶部和底部条纹下方流动视图,因此会将控件一起压扁以适合可用空间。

阿里

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

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

OK,我可以看到这是一个有点整洁。然而,我仍然好奇为什么我们必须这样做?这是xcode5中的错误吗? –

+0

也许是它的一个bug,但我宁愿说它是那些未定义的行为之一,在以前的iOS版本中以相同的方式实现,并在iOS 7中突然更改。 –

我不知道这是否会帮助你,但还有另一种选择你情况:尝试使用__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; 
} 

希望这可以帮助你