9

我为 iOS 5 和 6 设计了我的 iPhone 应用程序。现在我希望它支持 iOS 7,但也支持两个旧版本。像许多开发人员一样,我一直在为状态栏与我的观点重叠而苦苦挣扎,我知道在 iOS 7 中无法保留旧的状态栏样式

然而 Stackoverflow 上的许多帖子都建议使用iOS 6/7 Deltas,它可以在 Xcode 中使用新的 SDK 进行设置:

Xcode 中的 iOS 6/7 Delta

我已经尝试过了,但我发现当我将这些值应用于视图控制器的根视图时没有任何反应。这些 Delta 仅对包含在根视图中的所有子视图产生影响。

为什么 Delta 不适用于根视图?有没有办法让它工作?(我不想将增量添加到我所有视图控制器中的所有 UI 元素。)

4

5 回答 5

2

我发现这项工作对我来说很好。

 -(void)viewWillLayoutSubviews
{
    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) 
   {
    // Load resources for iOS 6.1 or earlier
    if(IS_IPhone5)
    {
        self.view.frame = CGRectMake(0.0, -64.0, 320.0, 568.0);
    }
    else
    {
      self.view.frame = CGRectMake(0.0, -64.0, 320.0, 480.0);  
     }
   }

 }
于 2014-01-30T08:58:20.003 回答
1

让我帮你,其实很简单。您需要按照以下步骤操作:

在文件检查器中将目标 xib 的视图设置为 iOS 7

1.使用Interface Builder将所有视图放入具有框架(0,20,rootViewWidth,rootViewHeight)的容器视图中。注意:无需为容器视图中的任何视图设置增量。 容器视图的增量为:delta-Y =-20, delta-height=20 否则为零

2.在xib中再放一个(0,0,rootViewWidth,20)的视图(命名为statusBarBackgroudView)。statusBarBackgroudView 的增量为:delta-Y = -20 否则为零。

为 statusBarBackgroudView 提供所需的背景颜色,它将显示在 iOS 7 的状态栏下方,而在 iOS 6 中,它将简单地转换为 Y = -20,因此将不可见。

XIB 中的视图层次结构应如下所示:

Root View
 -Container View
   -your subviews
 -Status Bar Background View
于 2014-02-24T16:39:52.787 回答
1

从你的问题我认为你似乎厌倦了为单个子视图设置增量值。但我认为这很容易。只需选择所有子视图:

在此处输入图像描述

并且您可以一次性从尺寸检查器中为所有子视图添加相同的增量值......就这么简单!

在此处输入图像描述

于 2014-01-30T08:38:44.560 回答
0

这个代码段为我解决了这个问题。我已将它放入 a中,它是项目中所有 ' 的BaseViewController超类。UIViewController我认为添加这个简单的代码而不是修改每个 xib 文件上的增量更可行。源自 bhavya kothari 的回答:

- (void)viewWillLayoutSubviews{

    [self fixStatusBarOffsetIfiOS6];
    [super viewWillLayoutSubviews];
}

- (void)fixStatusBarOffsetIfiOS6{

    if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){
        self.view.frame = CGRectMake(0.0, -20.0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame) + 20);
    }
}
于 2014-02-24T16:11:10.067 回答
0

如果(IS_Ios6){

    if (IS_IPHONE_4) {
        self.view.frame = CGRectMake(0, 0, 320, 480);
    } else if (IS_IPAD){
        self.view.frame = CGRectMake(0, 0, 768, 1024);
    }
    self.wantsFullScreenLayout = YES;
}

将此代码放入 viewDidLoad ...

于 2014-07-04T12:01:06.503 回答