如何以编程方式设置iOS 6/7 Deltas

13

我在使用Xcode 4.6开发UISplitView应用程序时,离开iOS6时我的设计如下:

图片描述

现在我迁移到新的Xcode5,现在我的设计如下:

图片描述

UINavigationBar完全重叠了我的UISearchBar...

Leo Natan告诉我要使用iOS 6/7 Delta,但由于我是通过编程方式创建和添加我的UISplitViewControllers的,

这可能行不通,我需要以编程方式设置iOS 6/7,但我不知道怎么做,请帮忙,谢谢。


2
如果你想在代码中实现这个,你需要使用框架。if (iOS7) {view.frame = ...} else {view.frame = ...} - Petro Korienev
@PetroKorienev 或者只是更改约束常量?这比更新框架更容易。 - Sulthan
该 OP 没有使用自动布局,并在代码中初始化了他的控制器。在代码中添加约束并不比更新框架更容易。 - Petro Korienev
4个回答

17
在iOS 7中,现在有扩展边缘,这就是为什么导航栏会重叠搜索栏的原因。您可以设置self.edgesForExtendedLayout = UIRectEdgeNone;,这是一个UIVewControlelr属性。 您还可以根据iOS版本进行检查,并且可以根据设备上当前的iOS版本执行操作。
NSString *version = [[UIDevice currentDevice] systemVersion];
int ver = [version intValue];
if (ver < 7){
//iOS 6 work
}
else{
//iOS 7 related work
}

5
此外,你可以使用 NSFoundationVersionNumber。
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
  // > iOS7
} else {
  // <= iOS6
}

这种方式是苹果在iOS 7过渡指南中建议的。 - coverback

3
您可以为解决这个问题创建一个宏。 对我很有用。
#define iOS7Delta (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 ) ? 20 : 0 )

-2
如果视图嵌入了UINavigationController - 只需取消根导航栏的"半透明"选项即可。
在Storyboard中,选择Navigation Controller Scene,然后选择Navigation Bar,在Attributes Inspector(Utilities-4 tab)中取消"Translucent"选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接