首页 > 代码库 > iOS 7 :代码解决ViewController的View整体上移的问题
iOS 7 :代码解决ViewController的View整体上移的问题
解决iOS7视图控制器的View整体上移20个像素
当我们在使用Xcode5创建一个新的项目的时候,我们会发现之前运行在iOS6上面的App整体的视图都向上移动了20个像素点,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度,于是iOS6上的控制器视图和上面的状态栏交叠在一起了。
关于这个问题,我们的解决方法:
苹果在升级到ios7的时候已经考虑到控制器视图整体上移的这个问题,于是就在iOS7 SDK中为视图控制器添加了一个新的属性edgesForExtendedLayout,将此属性设置为UIRectEdgeNone,然后所有ViewController的View就整体上移了20个像素点。
为了我们的App可以同时支持iOS6和iOS7,为了方便,我们可以建立一个BaseViewController,重写它的ViewDidLoad方法,代码如下
- (void)viewDidLoad{ [super viewDidLoad];#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000 if([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIExtendedEdgeNone; }#else float barHeight =0; if (!isIPad()&& ![[UIApplication sharedApplication] isStatusBarHidden]) { barHeight+=([[UIApplication sharedApplication]statusBarFrame]).size.height; } if(self.navigationController &&!self.navigationController.navigationBarHidden) { barHeight+=self.navigationController.navigationBar.frame.size.height; } for (UIView *view in self.view.subviews) { if ([view isKindOfClass:[UIScrollView class]]) { view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height - barHeight); } else { view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height); } }#endif}
使用宏 __IPHONE_OS_VERSION_MAX_ALLOWED 判断当前是否是iOS7及其以上的版本。>7.0则使用新的 edgesForExtendedLayout API,遍历子视图逐个下移 subviews,并自动根据状态栏/导航栏的可视状态计算要移动的偏移量。
注:如果已升级至Xcode5,将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型可解决此问题。
官方已经给出状态栏同时兼容ios6和ios7的解决方案.集成在xcode5中,如下图所示:
Deltas的意思你可以理解为增量.相对增量,将?填写为20即可.
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。