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。
在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。
相关文章推荐
- iOS开发之不同版本适配问题
- IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)
- iOS 版本适配总结
- 浅谈——适配所有IOS版本的反地理编码的代理转block封装
- IOS之7版本适配UITableVIew与UINavigationController
- IOS UIGraphicsBeginImageContextWithOptions 版本适配问题
- iOS开发系统版本适配(未完待续。。。)
- iOS autolayout进阶教程,实现视频播放时,横竖屏的自动切换-适配iOS8 sizeClass 和之前的版本
- ios之开发屏幕适配和系统版本适配
- IOS开发之不同版本适配问题3(#ifdef __IPHONE_7_0 BaseSDK Development Target)
- IOS开发之不同版本适配问题3(#ifdef __IPHONE_7_0 BaseSDK Development Target)
- 【版本适配】iOS中文本的自适应高度
- iOS版本适配
- [iOS]关于如何在项目中同时适配低版本和高版本的API的一点小见解
- iOS - 项目更换百度地图2.5版本, 适配iPhone6和iPhone6 plus出现的问题
- IOS开发之不同版本适配问题2(#ifdef __IPHONE_7_0)
- ios不同版本_适配
- IOS版本和IPHONE5/5S/6/6 Plus适配总结
- iOS不同版本适配问题(#ifdef __IPHONE_7_0)
- iOS不同版本适配问题