昨天想手工实现一下类知乎日报的Navigation Bar的动态颜色改变,但不管怎么设置Navigation Bar的 backgroundColor barTintColor alpha參数都达不到想要的效果。所以就试了试用View Debugging来分析一下系统Navigation Bar的渲染层次,以达到动态改变NavigationBar的背景颜色的功能
        //測试代码一
        self.navigationController?.navigationBar.barTintColor = UIColor.yellowColor()
       
self.navigationController?.navigationBar.alpha = 0.5
        self.navigationController?

.

navigationBar.backgroundColor = UIColor.greenColor()

得到的渲染效果例如以下
我们能够看到位于最上层的是navigationBar的barTintColor层,而navigationBar的bar的backgroundColor会被遮挡掉。在这里我尝试设置了alpha值。可是并没起到作用。那个蓝色的层是我在主view和navigationBar的中间垫了一层蓝色的view
        //測试代码二
        self.navigationController?

.

navigationBar.hidden = true

可是我们从上一张渲染图中能够看到,在backgroundColor和barTintColor这两层之间还有若干层,这些层和navigationBar有什么关系呢,为了探究这个问题,我把navigationBar设置为hidden
能够看到上面的那几层view全是因为navigationBar产生的。而我终于想要实现的由全透明到不透明的渐变中,全透明的效果就是这样。所以我首先尝试在加入navigationBar的条件下实现和其hidden一样的效果
        //測试代码三
        self.navigationController?.navigationBar.barTintColor = nil
        self.navigationController?.navigationBar.backgroundColor = nil
我做的第一件事是将能够被染色的两个颜色层的颜色设置为空,即无色,但效果有些奇怪
为了更清晰,我在StoryBoard里又加入了左右的barButtonItem和中间的title,依照渲染图来看,这正是我想要的效果了,但实际在模拟器中的效果却不一样
结果是这种。即便两个颜色层都无色。却仍然另一层半透明效果在
        //測试代码四
        self.navigationController?

.

navigationBar.barTintColor = UIColor.clearColor()

        self.navigationController?.navigationBar.backgroundColor = UIColor.greenColor()
而后我又想到了用clearColor来实现透明效果,但结果反而更出乎意料
我尝试了几次,barTintColor的颜色一旦被设置为clearColor就会变为黑色,barStyle为default。可是backgroundColor设置为clearColor的时候就会是正常的透明色
        //測试代码五
        self.navigationController?.navigationBar.barTintColor = UIColor.yellowColor()
       
self.navigationController?

.

navigationBar.alpha = 0

        self.navigationController?

.

navigationBar.backgroundColor = UIColor.greenColor()

为了验证alpha的作用,我特地将alpha调为0来观察它和第一个渲染图的差别,结果是,没有差别,改变alpha什么都不会变
        //測试代码六
        self.navigationController?

.

navigationBar.barTintColor = UIColor.yellowColor()
       
self.navigationController?.navigationBar.translucent = false
       
self.navigationController?

.

navigationBar.backgroundColor = UIColor.greenColor()

我又考虑是不是translucent參数为真才使得半透明效果一直存在,所以我将其设置为假,得到的渲染图例如以下
当translucent为假的时候,barTintColor层会和主View的第一层SubView平级
        //測试代码七
        self.navigationController?.navigationBar.barTintColor = UIColor.yellowColor().colorWithAlphaComponent(0)
       
self.navigationController?

.

navigationBar.alpha = 0

        self.navigationController?

.

navigationBar.backgroundColor = UIColor.greenColor()

我又尝试了更改barTintColor颜色的透明度和插入背景图片再更改透明度,最后发现alpha什么卵用都没有
所以在这得到的结论是仅仅要navigationBar存在。利用public API就无法做到全透明效果
可是事情总有还有一种解决方法,我通过查资料发现曾经有人用OC实现了这样的效果
效果图例如以下
用了一种Hack的方法
http://www.cocoachina.com/ios/20150409/11505.html

转载于:https://www.cnblogs.com/liguangsunls/p/7111624.html

UINavigationBar的系统渲染方式相关推荐

  1. 设计一个高性能三维渲染服务器,第一人称视角三维实景漫游系统渲染流水线架构研究.pdf...

    文档介绍: 同济大学 硕士学位论文 第一人称视角三维实景漫游系统渲染流水线架构研究 姓名:张岩 申请学位级别:硕士 专业:结构工程 指导教师:谢步瀛 20040301 关键词摘要计算机辅助三维实景漫游 ...

  2. 海康大华网络摄像头高起播低延时RTSP网页无插件流媒体专用播放器EasyPlayer-RTSP之GDI和D3D两种视频渲染方式的区别介绍

    GDI和D3D两种视频渲染方式的区别 EasyPlayer-RTSP windows播放器支持D3D和GDI两种渲染方式. D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY ...

  3. SkeyePlayer RTSP Windows播放器D3D,GDI的几种渲染方式的选择区别

    SkeyePlayer RTSP windows播放器支持D3D和GDI两种渲染方式,其中D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY_FORMAT_YUY2 DISP ...

  4. revit导出lumion插件_建筑工程BIM建模入门级教程——REVIT的几种渲染方式

    文末-粉丝福利--关注-加入BIM交流群 Revit的傻瓜式渲染,图像细腻,操作简单,重点在于材质和光线的调节,一直受到不少设计师的喜爱.Revit中自带了两个渲染引擎,再加上云渲染以及不同的渲染插件 ...

  5. 弱电工程网络视频监控系统联网方式及接地要求

    前言: 网络视频监控系统如何组网?网络架构系统如何组成?这些都是作为一个安防监控行业的人都必须具备的能力,下面为了让大家更了解一下,整理一些相关资料和大家分享一下. 图源:图虫创意 弱电工程网络视频监 ...

  6. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

  7. vue 多页面多模块分模块打包 分插件安装_Vue渲染方式

    Vue中的渲染方式总结可分四种: 原有模板语法,挂载渲染 使用render属性,createElement函数直接渲染 使用render属性,配合组件的template属性,createElement ...

  8. SPA优缺点、解决单页面应用的SEO困难问题以及三种网页渲染方式

    SPA特点优点缺点总结 1. 单页Web应用(SPA - Single Page web Application) 也就是说只有一个HTML文件的Web应用, 我们就称之为单页Web应用, 就称之为S ...

  9. 电脑重装系统引导方式不是BIOS 不能引导MBR磁盘怎么办

    有网友反应电脑重装系统引导方式不是BIOS 不能引导MBR磁盘怎么办?不知道是什么原因造成的导致安装不了.其实这种情况就是你使用的PE-U启动盘有两种方式引导,一种是新型的引导UEFI,会来提问的都是 ...

最新文章

  1. cp复制文件和目录的使用举例
  2. AI理论知识基础(26)-机器学习常见损失函数, 共轭梯度法(2)
  3. SAP 电商云 Spartacus UI shipping method 切换时的 spinner 显示
  4. mysql终端_MySQL之终端(Terminal)管理MySQL
  5. ad network
  6. 编写C语言代码,实现以下功能:有N名学生,每个人的信息包括学号、姓名和语文、数学、英语、平均分等内容(用结构体表示 ),输出平均分排名倒数第2的学生信息。
  7. asp.net弹出alert提示框
  8. 解决Linux系统中python matplotlib画图的中文显示问题
  9. Java 多线程学习笔记
  10. cloudsim的安装和配置
  11. eclipse各版本下载列表
  12. mysql字典_mysql常用字典表(完整版)
  13. Error setting non null for parameter #2 with JdbcType null . Try setting a different JdbcType for th
  14. 生死看淡,不服就GAN(七)----用更稳定的生成模型WGAN生成cifar
  15. 重磅!Amazon发布个人免费的AI编程助手:CodeWhisperer !
  16. 光猫和路由器上网详解
  17. 计算机程序 申请专利,计算机程序能申请专利吗
  18. 推荐系统遇上深度学习(三十六)--Learning and Transferring IDs Representation in E-commerce...
  19. ps还原上一步快捷键_ps还原上一步快捷键_photoshop恢复上一步操作的快捷键是什么...
  20. SpringBoot中service注入失败(A component required a bean of type ‘XXService‘ that could not found)...

热门文章

  1. HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
  2. 发布中文搜索引擎数据库 TngouDB
  3. ZeroMQ接口函数之 :zmq_msg_get - 获取消息的性质
  4. 对注册表操作的REG函数
  5. linux环境内存查询指令,帮助你检查Linux系统内存及其使用情况的命令
  6. can总线报文是固定的吗_CAN总线传输协议
  7. 是介于小型机和微型计算机,第一章计算机基础解析.ppt
  8. 华为服务器虚拟化断电,服务器断电日志查看
  9. 云服务器cpu系列,云服务器cpu系列
  10. python论文参考文献5篇_“送”5篇SCI论文,意味着什么?