ios 6和 ios 7适配问题,让程序同一时候支持iOS 6和iOS 7,setEdgesForExtendedLayout

因为各种原因。我们的程序须要同一时候支持iOS 7以及之前的版本号(比如iOS 6)。也就是说开发人员不得不同一时候在iOS 7和iOS 6之间进行开发。实际上开发人员对此是比較讨厌的。

iOS 7中的布局问题

以下是很easy的一个程序,执行在iOS 6中的界面:

而要是执行在iOS 7的模拟器中。会看不到label了:

这是为什么呢?我们对其reveal一下看看吧:

从上图能够看出,实际上label躲在NavigationBar后面了。

在iOS 7中,苹果引入了一个新的属性。叫做[UIViewController setEdgesForExtendedLayout:]。它的默认值为UIRectEdgeAll。当你的容器是navigation controller时。默认的布局将从navigation bar的顶部開始。这就是为什么全部的UI元素都往上漂移了44pt。

修复这个问题的高速方法就是在方法- (void)viewDidLoad中加入例如以下一行代码:

1
self.edgesForExtendedLayout = UIRectEdgeNone;

这样问题就修复了。

iOS 6执行异常

如今假设在iOS 6中执行程序,会遇到以下这种执行时异常错误:

1
[LAViewController setEdgesForExtendedLayout:]: unrecognized selector sent to instance 0x778a210

全部仅仅能在iOS 7中执行的API须要又一次封装一下,例如以下代码所看到的:

1
2
3
4
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
    self.edgesForExtendedLayout = UIRectEdgeNone;
}

Xcode 4编译错误

有些机器可能还在使用Xcode 4.6,当用4.6来编译代码时,会遇到以下的编译错误:

1
2
Property 'edgesForExtendedLayout' not found on object of type 'LAViewController *'
Use of undeclared identifier 'UIRectEdgeNone'

为了避免这个错误。能够创建以下的这个宏:

1
2
3
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
#define IOS7_SDK_AVAILABLE 1
#endif

然后在须要的地方将iOS 7的代码包装一下就可以:

1
2
3
#ifdef IOS7_SDK_AVAILABLE
...
#endif

UILabel不一致的background

对于UILabel。在iOS 7中它的background颜色默认是clearColor,而在iOS 6中默认的是白色。

所以。我们最好在代码中对label的background颜色进行明白的设置:

1
view.backgroundColor = [UIColor clearColor];

全屏时隐藏状态栏

在iOS 6中。当调用presentViewController时,默认的modal screen将是全屏(UIModalPresentationFullScreen)。为了在iOS 7中也能获得同样的效果。我们能够在modal controller中加入例如以下代码:

1
2
3
4
- (BOOL)prefersStatusBarHidden
{
  return YES;
}

UIToolbar barStyle

有时候,我们会将UIToolbar与系统键盘结合起来使用。而在iOS 6中的键盘是黝黑色的。此时toolbar的style一般也是类似的,例如以下代码所看到的:

1
self.barStyle = UIBarStyleBlack;// or UIBarStyleBlackTranslucents

而在iOS 7中。键盘变为了亮色,因此我们须要依据不同的iOS 版本号,设置不同的bar style。

1
2
3
4
5
6
7
8
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
{
    self.barStyle = UIBarStyleDefault;
}
else
{
    self.barStyle = UIBarStyleBlack;//or UIBarStyleBlackTranslucent
}

很多其它

上面这些技巧是我眼下在开发中遇到的,肯定还有很多其它的技巧,大家要是知道的话能够告诉我。

最后送大家一个图。看看相关差异吧:

原文地址:https://www.cnblogs.com/wgwyanfs/p/7144952.html