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。

  这个是可以实现的,但是我没有去实践,我就偷懒啦??,交给你们去实践好了。

思路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文件中导入这个类别,然后调用,看看运行结果:

     

     运行结果:

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

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

     

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

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

     

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

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

时间: 2024-10-12 15:49:45

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

iOS开发之iOS7设置状态栏字体颜色

应用中登陆界面颜色较浅,状态栏字体颜色为黑色,跳转到主界面之后,界面颜色较深,状态栏颜色随之变成白色.但是再重新返回登陆界面后,状态栏字体颜色并没有改成黑色,特别别扭. plist文件里将View controller-based status bar appearance改为NO然后在view controller里边加上下边一句就可以了,这样状态栏是黑字 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyle

IOS:UI设计之UINavigationController,NavigationBar,ToolBAR相关基础

基本概念:导航视图控制器(UINavigationController)是用于构建分层应用程序的主要工具,管理着多个内容视图的换入和换出,并且自身提供了视图切换的动画效果(例如:相册,QQ,微信等APP应用). 它的父类是UIViewController,是所有视图控制器的基类,导航控制器以栈的形式来实现,其本身也属于视图控制器. 下图是UINavigationController的分层结构图: UINavigationController view层级 栈的基本概念与性质: 栈是一种数据结构,

iOS 使用UI控件的外观协议UIAppearance进行设置默认UI控件样式

在iOS开发中,经常会对UINavigationBar的样式进行全局样式.采用的设置方式有两种: 第一种,采用方式如下: [UINavigationBar appearance] 这种是对一类对象的默认全局外观样式设置,它对设置时机有要求. 通常需要在UIWindow的viewlayout之前.错过了时机后,设置是没有效果的. 可以选择在下面方法内设置: - (BOOL)application:(UIApplication *)application didFinishLaunchingWith

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

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

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UITableViewCell的选中时的颜色设置

1.系统默认的颜色设置 //无色 cell.selectionStyle = UITableViewCellSelectionStyleNone; //蓝色 cell.selectionStyle = UITableViewCellSelectionStyleBlue; //灰色 cell.selectionStyle = UITableViewCellSelectionStyleGray; 2.自定义颜色和背景设置 改变UITableViewCell选中时背景色: UIColor *color

iOS开发UI篇—ios应用数据存储方式(偏好设置)

iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏好设置.比如,保存用户名.字体大小.是否自动登录 存储位置: 存储形式: 二.代码示例 1.storyboard 2.代码 1 // Created by 鑫 on 14-10-24. 2 // Copyright (c) 2014年 梁镋鑫.

iOS导航栏NavigationBar的颜色,按钮和标题以及字体颜色

首先,层级关系: leftBarButtonItem.rightBarButtonItem.title都是加在UINavigationItem上的,UINavigationItem再加在NavigationBar上,NavigationBar对应唯一的NavigationController. 1. 设置导航栏NavigationBar的背景颜色: 在appdelegate里创建UINavigationController后 设置 (1.) setBarTintColor : 设置Nagivat