9

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

4

6 回答 6

16

尝试使用:

navigationController.navigationBar.translucent = NO;
于 2013-09-19T12:28:37.417 回答
13

Try this:

#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;
}
于 2013-09-19T12:37:53.430 回答
7

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

基本上我将所有子视图向下移动导航栏的高度(45)。对于我的滚动视图/表格视图,在我的应用程序中始终位于屏幕底部,我将它们的高度降低了 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);
        }
    }
}
于 2013-09-19T20:00:42.683 回答
2

如果您在带有 Autolayout 的 Interface Builder 中使用 Storyboard,则可以使用“顶部布局指南”为视图顶部添加约束

于 2013-09-26T01:55:17.133 回答
2

如果您使用的是 Interface Builder,我很幸运可以取消选中“扩展边缘”>“顶部栏下”的设置:

在此处输入图像描述

在 iOS 7 和 6 中为我工作。

于 2014-01-28T20:27:11.513 回答
1

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

于 2013-09-19T23:50:18.767 回答