iOS 5已经有了很方便的自定义UINavigationBar
的方法,但是iOS 4现在还远未完全被iOS 5取代,因此,在做程序开发的时候必须要考虑对iOS 4的兼容。因此,要自定义UINavigationBar
还不能简单的直接用iOS 5中才有的自定义API。
关于这个话题,我曾经写过一篇日志,但是后来发现那篇日志里面的实现方法有诸多缺陷。因此我后来对那篇文章做过部分删改。这两天,我再次研究了一下NavigationBar的自定义,总算找到了一个近乎完美的解决方法,因此,我决定写出来和大家分享一下。
本文中的实现方法很大程度上参考了这篇文章,不过我这里介绍的实现方法在原方法的基础上加入了对设备旋转的支持。
方法的核心思想是创建一个UINavigationBar
的子类,让这个子类支持背景图,然后在项目中用自定义类替换UINavigationController
的navgationBar
。不过有一个问题是,UINavigationController
的navgationBar
属性是一个只读属性,因此我们只能在xib中将navgationBar
的类改成我们的自定义类。
我还没有找到适合StoryBoard的无xib的解决方法,因此我在上面说这个方法是“近乎完美”。不过既然是部署到iOS 4,那项目不采用StoryBoard也不算特别反人类。好了,下面开始代码说话(注:代码用了ARC):