IOS之UI--动态设置NavigationBar的颜色以及透明度

前言:有时候我们需要设置UINavigationController的导航条NavigationBar的颜色为透明度,这时候就需要使用到NavigationBar的barStyle这个属性:

再看QQ空间的仿制项目示例:

               

代码使用示例:nc.navigationBar.barStyle = UIBarStyleDefault;
<备注:下面全部展示的UI图例,window.view背景是绿色的>

一、在没有设置背景图片的情况下:

1、UIBarStyleDefaul
因为是默认,所以可以不设置barStyle这个属性。

2、UIBarStyleBlack
3、UIBarStyleBlackOpaque
4、UIBarStyleBlackTranslucent(Translucent半透明)
 这里2~4都是一样的:

  

二、将1X1的透明图片或者是空UIImage对象(建议直接使用UIImage对象,连图片都不需要了),设置为背景

  代码实例:

    

  当然,还有一个前提需要提出来:一下实例图都是没有添加下面字段的(XCode 7.2.1版本)

    
1、UIBarStyleDefaul

2、UIBarStyleBlack
3、UIBarStyleBlackOpaque
4、UIBarStyleBlackTranslucent(Translucent半透明)

 这里2~4都是一样的:

三、将1X1的全黑色的图片,设置为背景

1、UIBarStyleDefaul

2、UIBarStyleBlack
3、UIBarStyleBlackOpaque
4、UIBarStyleBlackTranslucent(Translucent半透明)
 这里2~4都是一样的:

    

四、将1X1的红色的图片,设置为背景

1、UIBarStyleDefaul

2、UIBarStyleBlack
3、UIBarStyleBlackOpaque
4、UIBarStyleBlackTranslucent(Translucent半透明)

  1.  这里2~4都是一样的:

  

 

附:遇到的还没有解决的问题:

  因为我看到QQ空间的导航控制器和状态栏是能够连在一起同时会渐变颜色,所以就讲上面通过图片设置背景换成直接更改导航条UINavigationBar的背景颜色试了试;

  我就添加了一行代码:

  

  效果却是这样的:

  

  然后我试了试默认不设置背景UIImage对象或者是不设置背景透明的图片:

  

  效果更加不好看了:

  

 

解决思路:

  我不知道QQ空间是怎么做到的,但是我下面会给出三种思路,其中两种思路会有具体实现。如果有哪位大神有更好的想法,欢迎交流,切磋切磋。

  这里展示一个出问题的效果,下面就针对这个情况进行解决问题:

  

思路1、自定义一个UINavigationBar,替换调用原来的自带的UINavigationBar。

  这个是可以实现的,但是我没有去实践,我就偷懒啦,交给你们去实践好了,可以试试使用KVC替换。

思路2、查看UINavigationBar的子UI元素,看看是否会有可以挖掘的对象。

  2-1、直接在官方头文件找,发现是木有相关属性的。

  2-2、然后我就运行程序,在xcode的顶部菜单栏找到Debug > View Debugging > Capture View Hierarchy

    

  2-3、其实NavigationBar的不单单是一个UIView,通过更改其Frame值,我一直没成功,所以另寻他路。有大神如果用更改frame值成功的多交流啊。

  2-4、然后我就从调试的角度窥探其NavigationBar的私有属性,想试试KVC。从上面的图中,NavigationBar有一个子UIView,那就是UINavigationBarBackground。

    那么如何找到这个UINavigationBarBackground类型的子UIView呢:

    

     然后,我就在这个类别中,根据实际需求,先简单的实现以下:

     

     最后,外部在ViewController.m文件中导入这个类别,然后调用,看看运行结果:

     

     运行结果:

      表示,这个方法是可行成功的。

     最后,我根据需求,这个需求就是可以实时改变该导航条的透明度和颜色,然后本人进行了代码的优化,代码我已经备份好了。

     可以看本人不断更新的一篇博客笔记下载使用:《IOS开发--常用工具类收集整理(Objective-C)(持续更新)

     或者直接到本人的github上去下载也可以:https://github.com/HeYang123456789/NavigationBarResetBackgroundDemo

      

思路3:为系统的UINavigationBar添加一个子UIView,然后对该UIView进行操作即可

    这个就可以到大神团队的bolg上学习了,该blog网址是:动态修改UINavigationBar的背景色

     

    该源码也可以到本人备份的百度云链接: http://pan.baidu.com/s/1sjYUL33 密码: si38   下载

 

总结一下,最好的方式就是第三种思路,因为根据实际需求,往往自定义可以更具有拓展性,可以满足更多的需求,比如,第三种思路中提到的插入添加一个UIView,这个UIView可以是自定义的。

这样的话,比如QQ控件的导航条上面还有一个Activity Indictor View,你下拉刷新的时候,它就旋转,要添加这样的功能,最好的方式就是添加一个自定义的UIView,这个自定义的UIView中可以添加这个Activity Indictor View。

 

时间: 2024-12-15 13:40:35

IOS之UI--动态设置NavigationBar的颜色以及透明度的相关文章

苹果5s iOS7.1.2设置键盘背景颜色的透明度方法

iOS7.1.2设置键盘背景颜色的透明度深浅度教程: 1.在你苹果手机中点击"设置"应用 2.然后在进入到的设置面板中点击"通用"选项,点击打开 3.之后来们再找到"辅助功能"选项 4.现在你会看到有一个"增强对比度"一栏 5.然后我们再把它点击"降低透明度"这个开关打开,就可以了 注意:降低系统的透明度是可以让手机运行更快哦,同时个人觉得还可以很好的让我们浏览内容呀.

iOS7.1设置键盘背景颜色的透明度的教程

1.我们先看看我设置好的一个透明的键盘背景截图,看看是不是有个性呀. 2.好了效果也看了接下来我们就来看看如何设置吧,希望例子对大家有帮助. 3.同样在苹果手机中点击"设置"按钮,如下图所示. 4.然后点击"通用"菜单进入. 5.接着我们再点击"辅助功能"选项 如图所示. 6.在这里面会看到有一个"增强对比度"一栏,点击进入 7.进入到了增强对比度之后我们会看到有一个"降低透明度" 开关现在我们就可进行打开

ios动态设置lbl文字标签的高度

  本文给大家分享的是ios动态设置lbl文字标签的高度宽度的方法,一共给大家汇总了3种方法,小伙伴们根据自己的项目需求自由选择. 代码如下: txtlbl.font = [UIFont boldSystemFontOfSize:14.0f]; txtlbl.numberOfLines = 0; NSString *str = @" 阿方决定设立科技特网络离开电视剧分w额两个大陆高科技了了不见了日i倒计时离开我说老师肯德基弗兰克萨江东父老将费德勒说阿方决定设立科技特网络离开电视剧分w额两个大陆高

IOS中一段文字设置多种字体颜色代码

  这篇文章主要介绍了IOS中一段文字设置多种字体颜色代码,十分的实用,有需要的小伙伴可以参考下. 给定range和需要设置的颜色,就可以给一段文字设置多种不同的字体颜色,使用方法如下: 代码如下: [self fuwenbenLabel:contentLabel FontNumber:[UIFont systemFontOfSize:15] AndRange:NSMakeRange(6, 1) AndColor:RGBACOLOR(34, 150, 253, 1)]; 代码如下: //设置不同

easy ui 如何设置下拉框 默认值的颜色

问题描述 easy ui 如何设置下拉框 默认值的颜色 下拉列表的数据:请输入** ,"请输入 "设置为灰色,但下拉列表的数据显示为黑色字体颜色 如何做?求大神指点 解决方案 div默认的下拉而已,获取第一个项目设置为灰色就行了 $('#cb').combobox('panel').find('div:first').css('color','#999')

iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构和plist文件 2.实现过程以及代码 在tableview的属性选择器中选择动态单元格. 说明:在storyboard中直接使用其自带的动态单元格完成tableviewcell的定义,并创建了一个管理该cell的类,进行了连线. 实现代码: 数据模型部分: YYappInfo.h文件 1 // 2 // YYappInfo.h 3 // 01-使用动态单元格来完成app应用程序管理界面的搭建 4

动态设置HyperLink颜色的问题

问题描述 我在数据库中存有字体颜色的值,例如:#FF6600,可我动态设置字体颜色时,程序老出错:System.InvalidCastException:指定的转换无效.我的代码如下:<asp:HyperLinkID="HyperLink1"runat="server"Target="_blank"NavigateUrl='<%#"~/info.aspx?UserId="+Eval("TitleId&qu

iOS应用开发中UIView添加边框颜色及设置圆角边框的方法_IOS

UIView加边框及边框颜色 引用库: 复制代码 代码如下: #import <QuartzCore/QuartzCore.h> 使用: 复制代码 代码如下: //添加边框和提示         CGRect frameRect = CGRectMake(20, 90, self.window.frame.size.width-40, self.window.frame.size.height-180);         UIView   *frameView = [[UIView alloc

IOS中一段文字设置多种字体颜色代码_IOS

给定range和需要设置的颜色,就可以给一段文字设置多种不同的字体颜色,使用方法如下: 复制代码 代码如下: [self fuwenbenLabel:contentLabel FontNumber:[UIFont systemFontOfSize:15] AndRange:NSMakeRange(6, 1) AndColor:RGBACOLOR(34, 150, 253, 1)]; 复制代码 代码如下: //设置不同字体颜色 -(void)fuwenbenLabel:(UILabel *)lab