关于ios设置导航栏背景图片,其实很简单,一行代码就能搞定,但是,由于需求不一样,你会遇到各种各样的坑,这根ios导航的机制设定有很大的关系,在终于设定好了以后,总结一下当中所遇到的问题。
1.设置导航栏背景图所需的各个尺寸
1倍图 640128 px (一般用不到)
2倍图 750128 px (5s,6,6s, 7)
3倍图 1242*192 px (6p,6sp)
备注:其实一般两种图就足够,5s也是用2倍图,现在一般最低适配到5s,当然如果需求不一样就三张。
2.设置导航背景图代码
//设置背景图
[self.navigationController.navigationBar setBackgroundImage:backImage forBarMetrics:UIBarMetricsDefault];
3.好了,图片出来了,如果是纯色图片或者图片上没有特别的图标,基本你会看不出来什么问题,但是,例如某些图片:
咋一看没问题,但是在5s上就直接会发现党旗的图标变细了,这是因为5s和6都是使用的2倍图,所以会造成挤压的效果,这是一个,还有一个你会发现图片的颜色不对劲,色值会偏浅一点,看一下图层,你会发现导航上会有一个系统自带的毛玻璃的一个视图,也就是半透明的效果,所以会导致你的图片颜色不对,你会想办法搜索去掉这个效果,也有方法:
你可以设置这个属性未NO,但是你设置完后发现效果去掉了,但是他么的为什么会往下偏移了64像素,你或许会知道怎么解决,设置:
self.automaticallyAdjustsScrollViewInsets = NO;
然而你会发现并没有什么卵用,然后你会各种尝试,最后徒劳,你只好把透明的效果再恢复,然后你发现还是会往下偏移64,你有一种想砸键盘的冲动,稳住,其实你只需要再设置这个属性为YES,运行,就好了,所以说,没事不要去碰这个东西,这个算是一个ios 的bug,至于图片的挤压问题,你可以使用类似料条气泡的背景图片处理方法,设置一个区域不拉伸:
//设置图片拉伸范围
UIImage *backImage = [UIImage imageNamed:@"homeNav"];
backImage = [backImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 100, 10, 10)];
//设置背景图
[self.navigationController.navigationBar setBackgroundImage:backImage forBarMetrics:UIBarMetricsDefault];
这样就可以解决图片不正的问题,另外,如果你发现迷你器上没问题到真机上不显示导航栏图片,百分之
90是因为UI给你切得是不是png的图,替换为png就没问题了。
至于毛玻璃如何完美去除,暂时还没有好的解决方法,如果有解决的欢迎私信,不胜感激。