您的位置:首页 > 产品设计 > UI/UE

UINavigationBar 点儿事&&去掉 NavigationBar 上的分割线

2015-06-25 15:52 323 查看
转于:http://my.oschina.net/joanfen/blog/133150

背景:App 主色调是 #2198C8(色 A), 但新增了一个模块在 push 到那个模块时需要改变颜色 为#25B4C7(色 B) ,然后再返回时依然是 #2198C8

用到的宏先列一下

?
很简单的问题,项目的 ViewController 都是继承自一个自定义的基类,于是我在基类中写了一个方法,是这样的

?
然后在需要改变颜色的ViewContoller(设为 C1)中调用

?
在基类的 viewWillAppear 中调用

?
本以为这样就大功告成了(别担心,如果你是来找答案的,到这里就可以成功了,我这里情况有点特殊,感兴趣的可以看下去),可当我从 Apush C1,再pop 到 A,整个颜色变化都是对的,like this:

A(色 A) ↔ C1(色 B)

但是,当我从 A push到 C1,再push 到 C2,然后 pop 回 C1,pop 回 C2时变成了这样:

A(色A) → C1(色 B) → C2(色 B)
A( 色B,这里本应该是色 A) ← C1(色 B) ← C2(色 B)

查了好久的 Nav 层级关系,可只要进了 C2界面就不行,开始以为是 push 了两层的原因,后来发现 push 到第二层的页面只有是 C2才会这样,到别的页面是没有问题的,然后我这时才好好看了一下 C2的导航条,是这样的





为了做这样的效果,我们当时是去掉了导航条上自带的一条分割线,方法在下面,否则这个中间会有条线,所以我想应该是对 Bar 的这个处理有问题


去掉 NavigationBar 上的分割线

PS:!!更新于2015-06-05 ,原来要去掉分割线只需要一句话即可

?
整个人都不好了,下面的是之前的坑代码

?
看完这段代码你们或许明白了为什么我返回之后在试图中设置的 BarTintColor 没有效果了,因为在上面的For 循环中,NavigationBar 上的 imageView 被 Hidden,我们添加了一个自己得 imageView, 所以现在只需要将这个自己添加的imageView 去掉就好了,于是我在上面那段代码中为自行添加到 Bar 上的 imageView设置了一个 tag

?
然后在 C2视图消失时将这个自定义的背景 imgView 移除,并将 Bar自带的 imageView 的隐藏状态取消:

?
这样我得到了我想要的结果:

A(色A) ↔ C1(色 B) ↔ C2(色 B)


Other Settings

设置标题颜色字体,需要设置其他属性,只需要在字典中添加对应的 Key-Value 即可,如阴影等

?
先更新这些,下次看到坑在填
----分割线----


Old 于2013-05-24 14:35

用UINavigationController的时候有时候为了整体效果可能需要修改navigationBar颜色,这时候只要更改它的tintColor就行了

苹果默认效果





在代码中加入

?
最终效果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: