在 iOS 7 后,导航栏增加了 translucent 效果,这使得导航栏背景色的变化出现了两种情况:

1.translucent 属性值为 YES 的前提下,更改导航栏的背景色。

2.translucent 属性值为 NO 的前提下,更改导航栏的背景色。

对于第一种情况,我们需要调用 UINavigationBar 的 setBackgroundColor: 方法。

这种方法显示的是渐变模糊效果的图片,没找到原因,推荐使用第二种

对于第二种情况我们需要调用 UINavigationBar 的 setBackgroundImage:forBarMetrics:方法。

[self.navigationController.navigationBar setBackgroundImage:[self imageWithColor:UIColor.blueColor] forBarMetrics:UIBarMetricsCompactPrompt];

根据颜色生成图片

// 根据颜色生成UIImage
- (UIImage*)imageWithColor:(UIColor*)color{CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);// 开始画图的上下文UIGraphicsBeginImageContext(rect.size);// 设置背景颜色[color set];// 设置填充区域UIRectFill(CGRectMake(0, 0, rect.size.width, rect.size.height));// 返回UIImageUIImage* image = UIGraphicsGetImageFromCurrentImageContext();// 结束上下文UIGraphicsEndImageContext();return image;
}

对于第二种情况,这里有三点需要提示:

1.在设置透明效果时,我们通常可以直接设置一个 [UIImage new] 创建的对象,无须创建一个颜色为透明色的图片。

2.在使用 setBackgroundImage:forBarMetrics: 方法的过程中,如果图像里存在 alpha 值小于 1.0 的像素点,则 translucent 的值为 YES,反之为 NO。也就是说,如果我们真的想让导航栏变成纯色且没有 translucent 效果,请保证所有像素点的 alpha 值等于 1。

3.如果设置了一个完全不透明的图片且强行将 NavigationBar 的 translucent 属性设置为 YES 的话,系统会自动修正这个图片并为它添加一个透明度,用于模拟 translucent 效果。

4.如果我们使用了一个带有透明效果的图片且导航栏的 translucent 效果为 NO 的话,那么系统会在这个带有透明效果的图片背后,添加一个不透明的纯色图片用于整体效果的合成。这个纯色图片的颜色取决于 barStyle 属性,当属性为 UIBarStyleBlack 时为黑色,当属性为 UIBarStyleDefault 时为白色,如果我们设置了 barTintColor,则以设置的颜色为基准。

iOS 修改导航栏背景色相关推荐

  1. ios 系统状态栏样式修改_iOS 一种新的修改导航栏样式的方法(支持iOS10).

    iOS 一种新的修改导航栏样式的方法. 开宗明义: 对系统导航栏最底层的UIView加一层CALayer, 通过操作这个自己创建的CALayer来修改导航栏样式. 修改系统导航栏样式的几种方法 1.使 ...

  2. iOS设置导航栏和状态栏

    文章目录 iOS 15 之后导航栏背景色的设置 1.状态栏设置 1.1.没有导航栏 1.2.有导航栏 2.导航栏背景和字体颜色 2.1.十六进制颜色转RGB 2.2.生成纯色图片 3.导航栏的另外一种 ...

  3. iOS 设置导航栏背景颜色

    //导航栏背景色UIColor *navBarColor = [UIColor colorWithRGB_au:0xD42D37];if (@available(iOS 15.0, *)) {UINa ...

  4. iOS 解决导航栏pop返回时出现黑块问题!

    iOS 解决导航栏pop返回时出现黑块问题! 问题描述: 导航栏正常从A页面push到B页面,从B页面pop返回A页面时遇到过渡过程中导航栏出现黑块的问题. 如截图所示: 问题原因: A界面导航栏被影 ...

  5. IOS设置导航栏返回按钮,并添加事件返回主页面

    IOS设置导航栏返回按钮,并添加事件返回主页面 前提是已经push了一个viewController了.才能使用. XXXTableViewController 里面书写 - (void)viewDi ...

  6. IOS设置导航栏的背景图片和文字

    IOS设置导航栏的背景图片和文字 - (void)viewDidLoad {[super viewDidLoad];[self.navigationBar setBackgroundImage:[UI ...

  7. ios 添加导航栏视图_iOS进度栏(进度视图)

    ios 添加导航栏视图 In this tutorial, we'll be discussing the UIProgressView component and create a progress ...

  8. uniapp 动态修改导航栏 之前使用this.$mp.page page提示未定义

    uniapp 动态修改导航栏 // 使用条件编译 防止H5报错// #ifdef APP-PLUSlet pages = getCurrentPages();let page = pages[page ...

  9. ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题

    ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题. 经过多次分析是因为底层大背景被设置了默认颜色引起,把它设置成对应白色就可以了: sel ...

最新文章

  1. RHCT 模拟题库及答案
  2. 上海day2--两年前最烧脑的环境变量
  3. gc()两分钟了解JDK8默认垃圾收集器(附英文)
  4. django项目日志
  5. Android开发之listview添加头布局(header)和脚布局(footer)的方法
  6. 零基础Unreal Engine 4(UE4)图文笔记之粒子系统
  7. 华为荣耀v8计算机没了,华为荣耀V8真机实测 没了徕卡到底咋样?
  8. day_4 Selenium请求库
  9. testbench实例 vhdl_testbench_testbench如何加载_vhdl testbench reset(5)
  10. 数学中常见的曲面方程及形状
  11. win7激活工具使用
  12. Vue 登录验证之滑动拼图验证码
  13. JavaScript:实现PigeonHoleSort鸽巢排序算法(附完整源码)
  14. spring boot 中阿里druid 数据源配置及密码加密
  15. maven学习记录:maven专栏简介
  16. 获取某个时间的当月起止时间
  17. 实现ubuntu系统和windows系统进行文件共享、互传等操作**
  18. YouTube 十岁了,这十年里视频网站改变了什么?
  19. Visual Studio强大的帮助工具--Resharper安装与使用
  20. 2022年PMP认证6月考试,保证通过,拿到PMP认证就能月入5万

热门文章

  1. SpringMVC与JSON传值,取值,使用SpringMVC实现文件的上传与下载,SpringMVC拦截器
  2. VUE activated,deactivated使用
  3. 全网最新 java 开发 OPC 实现 DA 通讯控制点位 西门子
  4. oracle xe连接数,解决Oracle XE允许连接的用户数不足问题
  5. Pygame 官方文档 - pygame.cursors
  6. Web(万维网)发展简史
  7. getTextSize()和putText()
  8. 爬取《喜马拉雅》音频排行榜
  9. Computer:计算机测试理论(开发/测试/上线)之DEV、SIT、UAT、PRD四套环境(测试环境/开发环境/生产环境)详细介绍之详细攻略
  10. ThinkPHP6使用七牛云存储,不改代码,改下配置就上七牛