iOS7 edgesForExtendedLayout

在iOS 7中,苹果引入了一个新的属性,叫做[UIViewController setEdgesForExtendedLayout:],它的默认值为UIRectEdgeAll。当你的容器是navigation controller时,默认的布局将从navigation bar的顶部开始。这就是为什么所有的UI元素都往上漂移了44pt。修复这个问题的快速方法就是在方法- (void)viewDidLoad中添加如下一行代码:

self.edgesForExtendedLayout = UIRectEdgeNone

这样问题就修复了。

 


1,首先

//定义宏,判断ios7           


            #define IOS7 [[[UIDevice currentDevice]systemVersion] floatValue] >= 7.0           


                        


            //添加代码           


            if            (IOS7)           


            {           


                        self            .edgesForExtendedLayout = UIRectEdgeNone;                           //视图控制器,四条边不指定           


                        self            .extendedLayoutIncludesOpaqueBars =             NO            ;                             //不透明的操作栏<br>    self.modalPresentationCapturesStatusBarAppearance = NO;           


            }


#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000           


                        if            (IOS7)           


                        {           


                        self            .edgesForExtendedLayout = UIRectEdgeNone;           


                        self            .extendedLayoutIncludesOpaqueBars =             NO            ;           


                        self            .modalPresentationCapturesStatusBarAppearance =             NO            ;           


            //        self.automaticallyAdjustsScrollViewInsets = NO;           


            //        self.navigationController.navigationBar.translucent = NO;           


            //        self.tabBarController.tabBar.translucent = NO;           


                        }           


            #endif

  


self.automaticallyAdjustsScrollViewInsets = NO;
看 这个UIViewController的这个属性你就明白了,此属性默认为YES,这样UIViewController下如果只有一个 UIScollView或者其子类,那么会自动留出空白,让scollview滚动经过各种bar下面时能隐约看到内容。但是每个 UIViewController只能有唯一一个UIScollView或者其子类,如果超过一个,需要将此属性设置为NO,自己去控制留白以及坐标问 题。

 

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
这个是判断iphone5 or 4

 

注意,目前我做的适配

如果之前使用了nib文件,同时ui不是自己手写代码add上去的,这里需要在代码里控制每一个ui了(如果你也中枪,那就跟我一样慢慢改吧,以后写代码尽可能手动)

如果是代码里画的ui,那么问题不大,做出响应调整即可。

 

当然如果你不需要兼容ios5.0,这样可以完全使用autolayout,这样可以使你的工作量降至最低,如果有不同方法欢迎大家来讨论