在更新到iOS 7之后,iOS 6中的所有视图都向上移动,并被导航栏隐藏

我已经将我的iPhone更新到iOS 7,并重新编译我的应用程序,在.xib文件和设备上的所有视图都向上移动,其上部分由导航栏隐藏。 在我的viewController我设置self.edgesForExtendedLayout = UIRectEdgeNone; 现在iOS 7上的一切都看起来不错,但是当我用Deployment Target 6.0编译我的项目并在iOS 6设备上testing它时,所有的视图都被导航栏再次隐藏了。我怎样才能使它们在iOS 7和iOS 6上同时一致? 我现在不想破坏iOS 6的支持。

所以这就是我所做的。 这不是最干净的代码,你需要确保你的滚动视图不会有奇怪的结果。

基本上我按照导航栏的高度(45)将所有的子视图向下移动。 对于我的应用程序中的滚动视图/桌面视图,我总是将它们的高度减less45,这样您仍然可以达到最终效果。 这是一些应用程序的解决scheme,但是您应该确保所有的滚动和表格都是这样缩小的。

因为它不是recursion的,所以你不需要担心scrollview中的tableviews或类似的东西。

 - (void)viewDidLoad { [super viewDidLoad]; if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { self.edgesForExtendedLayout = UIRectEdgeNone; } else { [self moveAllSubviewsDown]; } } - (void) moveAllSubviewsDown{ float barHeight = 45.0; for (UIView *view in self.view.subviews) { if ([view isKindOfClass:[UIScrollView class]]) { view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height - barHeight); } else { view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height); } } } 

尝试使用:

 navigationController.navigationBar.translucent = NO; 

尝试这个:

 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { self.edgesForExtendedLayout = UIRectEdgeNone; } 

如果您在Interface Builder中使用Autolay的Storyboard,则可以使用“Top Layout Guide”(顶层布局指南)为视图的顶部添加一个约束,

如果您使用的是界面生成器,我已经有一些运气,取消选中“扩展边缘”>“顶部条柱”下的设置:

在这里输入图像说明

适用于iOS 7和iOS 6。

将此值添加到您的应用程序plist:“查看基于控制器的状态栏外观”并将其设置为“否”。