适配iOS7之—UINavigationController

今天小伙伴@nidom在群里讨论适配UINavigationController的问题,我一头雾水,怎么我也用了UINavigationController就没有问题了,为了一探究竟,我新建了一个项目,测试了一下,确实是不一样,在iOS6中,是从UINavigationBar的下面开始计算坐标点,但是到了iOS7中,就从屏幕左上角开始计算了,如下图:

UINavigationController

但是我项目里的就没问题,于是把项目查找了一番,原来是我自定义了UINavigationBar的backgroundImage:


[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"1.png"] forBarMetrics:UIBarMetricsDefault];

设置了navigationBar的backgroundImage之后,iOS7下,也是从屏幕上(0,64)这个点开始计算了。

当然在iOS7中也可以通过设置edgesForExtendedLayout为UIExtendedEdgeNone达到相同的效果,有兴趣的可以看看这篇文章:http://blog.csdn.net/wangyx810328/article/details/9142901,作者写的那个工具也很凶残,可以玩玩。

  • zeng

    我也设置了UINavigationBar的backgroundImage,storyboard中设置了View as iOS6 and later 用xcode5编译iOS7上跑,控制器View上的控件向上漂移了64点。和你说的不同啊

    • answerhuang

      可以贴代码看看。

      • zeng

        1.xcode5新建个singleView工程
        2.storyboard中拉一个navigationController,和一个viewController(设置成navigationController的rootViewController)
        3.设置storyboard 的Builds for iOS6and latter
        4. storyboard中拖一个label
        5.didFinishLaunchingWithOptions中设置导航栏的背景图片

        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"topbar_bg"] forBarMetrics:UIBarMetric