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

时间:2013-09-19 12:23:30

标签: ios cocoa-touch ios6 uiviewcontroller ios7

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

6 个答案:

答案 0 :(得分:16)

尝试使用:

navigationController.navigationBar.translucent = NO;

答案 1 :(得分:13)

试试这个:

#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;
}

答案 2 :(得分:7)

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

基本上我按导航栏的高度向下移动所有子视图(45)。对于我的滚动视图/ tableviews,我的应用程序总是在屏幕的底部,我将它们的高度减少45,这样你仍然可以达到目的。这是某些应用程序的解决方案,但您应该确保所有滚动和表格视图都要像这样缩小。

因为它不是递归的,所以你不必担心滚动视图中的表视图或类似的东西。

- (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);
        }
    }
}

答案 3 :(得分:2)

如果您在Interface Builder中使用故事板与Autolayout,您可以使用“顶部布局指南”为视图顶部添加约束

答案 4 :(得分:2)

如果你正在使用Interface Builder,我已经运气好了取消选中“extend edges”>的设置。 “顶层酒吧”:

enter image description here

适用于iOS 7和6版本。

答案 5 :(得分:1)

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