您的位置:首页 > 移动开发 > IOS开发

IOS:版本适配

2014-08-15 11:32 211 查看
一 没有导航栏的viewController适配方法

在iOS7中view默认是全屏模式,状态栏的高度也加在了view的高度上,例如iOS7之前iphone5中self.view.frame.size.height
= 548,在iOS7中就是568了,在iOS7中navigationbar是半透明的,statusbar则是全透明的,这样一来,原来的程序用xcode5+iOS7sdk上编译后运行就会出现问题了。如下,在视图上加一个view,和状态栏重叠




改正方法:

(1)修改本视图的bounds

if([[[UIDevice
currentDevice] systemVersion]
floatValue] >= 7.0)

{

self.view.bounds =
CGRectMake(0, -20,
320,
self.view.bounds.size.height);

}

这种方法需要更改每一个viewController,较为麻烦
(2)设置window,在appdelegate.mapplication:
didFinishLaunchingWithOptions:方法中添加代码如下:

if([[[UIDevice
currentDevice] systemVersion]
floatValue] >= 7.0)

{

//设置状态栏的样式

[application
setStatusBarStyle:UIStatusBarStyleLightContent];

self.window.clipsToBounds =
YES;

self.window.frame =
CGRectMake(0,
20, 320,
self.window.frame.size.height -
20);

}

运行,会看到状态栏消失了,

解决方法:在info.plist文件中添加View controller-based status bar appearance项,设置为NO。状态栏就会出现了,如下:



(二)有导航栏的viewController适配方法

现在将根视图改为UINavigationController,不设置任何属性,运行结果:



可以看到view被导航栏覆盖了,只要在viewDidLoad中设置以下self.view的edgesForExtendedLayout属性就行了,

if([[[UIDevice
currentDevice] systemVersion]
floatValue] >= 7.0)

{

self.edgesForExtendedLayout =
UIRectEdgeNone;
}

再运行一下:



注:

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向。 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域。将其设置为UIRectEdgeNone,就不会延伸到这些区域了,

其他的一些属性:

(1) self.automaticallyAdjustsScrollViewInsets
= YES;在iOS7中如果视图里面存在唯一一个UIScrollView或其子类View,那么它会自动设置相应的内边距,这样可以让scroll占据整个视图,又不会让导航栏遮盖.

(2)self.extendedLayoutIncludesOpaqueBars
= YES;这个属性指定了当Bar使用了不透明图片时,视图是否延伸至Bar所在区域,默认值时NO。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: