代码改变世界

iOS7自定义statusbar和navigationbar的若干问题

2014-09-23 09:59  JG2014  阅读(534)  评论(1编辑  收藏  举报

当然有许多问题是这篇文章中没有提到的,按照文章的方法进行设置,你可能会遇到以下问题: 
1.navigationbar的背景图片自定义以后,statusbar虽然和navigationbar共用了背景图,但是其还是透明的,颜色会比navigationbar淡许多,导致最终效果很难看,那么如何修复这个问题呢?很简单调用以下方法: 

self.navigationController.navigationBar.translucent = NO;

此时navigationbar和statusbar就融为一体了,实现了类似evennote的那种效果。 
我曾经试图通过设置: 

self.extendedLayoutIncludesOpaqueBars = YES;

来修复这个问题,我之所以会想到这个办法是因为通过设置controller的view的背景色我发现,statusbar下面似乎没有被背景色填充,事实却证明此方法行不通。 

2.自定义navigationbar的背景图以后pop一个controller播放动画时,statusbar和navigationbar所在的位置会显示navigationcontroller的背景色,因为默认是黑色的,如果你的controller的背景色不是黑色的就会非常难看。那么解决这个问题的关键就是将:

self.extendedLayoutIncludesOpaqueBars = YES

因为默认是NO。我建议在你自定义navigationbar之后始终将它设置为NO,这样既能解决上述所述的问题,也能方便你在xib或者storyboard中的布局,如果使用默认值你会发现,在你自定义navigationbar的样式之后xib或者storyboard中的试图统统向下挪动了64,非常的蛋疼。


3.关于preferredStatusBarStyle不执行的问题。 
这个方法不执行,害的我花了一天的时间去解决,各个无果之后求助了stackoverfollow的大神在线帮助,一夜纠结之后有大神回复了这个问题,那就是因为没有给UIApplication设置rootViewController。我现在的工作属于二次开发,项目没有使用系统apple提供的导航控制器,自定义的导航控制也不从系统的继承而来,导致没有设置rootViewController,虽然控制台有警告信息,但是项目能够正常运行,所以一直没有注意这个问题,最终导致了preferredStatusBarStyle无法执行。虽然具体原因只有看过UIApplication的源代码才会清楚,但是我们看不到。所以遵循开发规则很重要,对每个一个黄色警告和控制台输出的警告信息一定要注意修复。说不定以后就会中招。