导航栏渐变色iOS


- (void)viewDidLoad {[super viewDidLoad];// 设置导航栏属性self.navigationBar.translucent = NO;[self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName:[UIFont boldSystemFontOfSize:28]}];// 修复iOS 15后导航栏变白色的bug并设置渐变背景[self ios15nvbug];
}
- (UIImage *)gradientImageWithBounds:(CGRect)bounds {CGSize size = bounds.size;if (size.width == 0 || size.height == 0) {size = CGSizeMake([UIScreen mainScreen].bounds.size.width, 88); // 默认宽度和导航栏高度}UIGraphicsBeginImageContext(size);CGContextRef context = UIGraphicsGetCurrentContext();// 创建渐变CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();CGFloat locations[] = {0.0, 1.0};NSArray *colors = @[(__bridge id)[UIColor colorWithRed:244/255.0 green:102/255.0 blue:36/255.0 alpha:1].CGColor,(__bridge id)[UIColor colorWithRed:205/255.0 green:75/255.0 blue:0 alpha:1].CGColor];CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations);// 横向渐变(从左到右)CGPoint startPoint = CGPointMake(0, 0);CGPoint endPoint = CGPointMake(size.width, 0);CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);// 获取渐变图像UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();CGGradientRelease(gradient);CGColorSpaceRelease(colorSpace);return gradientImage;
}
- (void)ios15nvbug {if (@available(iOS 13.0, *)) {UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];[appearance configureWithOpaqueBackground];// 设置渐变背景图片UIImage *gradientImage = [self gradientImageWithBounds:self.navigationBar.bounds];appearance.backgroundImage = gradientImage;appearance.shadowImage = [[UIImage alloc] init];appearance.shadowColor = nil;// 设置导航栏标题的文本属性[appearance setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont boldSystemFontOfSize:22]}];self.navigationBar.standardAppearance = appearance;self.navigationBar.scrollEdgeAppearance = appearance;} else {// iOS 13 以下使用旧的方法设置背景图片UIImage *gradientImage = [self gradientImageWithBounds:self.navigationBar.bounds];[self.navigationBar setBackgroundImage:gradientImage forBarMetrics:UIBarMetricsDefault];[self.navigationBar setShadowImage:[UIImage new]]; // 去除默认的阴影线[self.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName: [UIFont boldSystemFontOfSize:22]}];}
}// 其余方法保持不变...@end

关键点解释

  1. 生成渐变背景图片 (gradientImageWithBounds: 方法):

    • 使用 UIGraphicsBeginImageContextCGGradientRef 生成一张横向渐变的图片。
    • 渐变颜色从左到右的效果通过设置 startPointendPoint 来实现。
    • 通过 UIGraphicsGetImageFromCurrentImageContext 获取生成的渐变图片。
  2. 设置导航栏的背景图片:

    • 使用 setBackgroundImage:forBarMetrics: 方法将生成的渐变图片设置为导航栏的背景,这样可以确保其他 UI 元素(如标题和按钮)不会被遮挡。
  3. 修复导航栏在 iOS 15 中的显示问题:

    • ios15nvbug 方法中设置 UINavigationBarAppearance,确保导航栏背景透明,以便使用渐变背景图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

layui tree customSelet选中的内容重写,查找父级

layui tree customSelet选中的内容重写&#xff0c;查找父级 需要重新源码 // 递归查找函数 // tree 所有数据 &#xff0c;nodeId选中数据id值 function findParent(tree, nodeId, parent null) {for (let i 0; i < tree.length; i) {if (tree[i].id nodeId) {return …

《Web性能权威指南》-浏览器API与协议-读书笔记

本文是《Web性能权威指南》第四部分——浏览器API与协议的读书笔记。 第一部分——网络技术概览&#xff0c;请参考网络技术概览&#xff1b; 第二部分——无线网络性能&#xff0c;请参考无线网络性能&#xff1b; 第三部分——HTTP&#xff0c;请参考HTTP。 浏览器网络概述 …

使用TypeORM进行数据库操作

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用TypeORM进行数据库操作 引言 TypeORM 简介 安装 TypeORM 配置 TypeORM 定义实体 连接数据库 运行项目 高级功能 事务管理 关…

架构师之路-学渣到学霸历程-38

nginx的热部署&#xff08;方案二&#xff09; 方案一的缺点就是直接升级完成了&#xff1b; 那么问题来了&#xff1a; 如果说出现问题了&#xff0c;想要回退 那么应该怎么处理&#xff1f;所以最好就是有一段的缓冲期限&#xff1b; 那么久可以直接 从升级的方案来进行 …

ESP-HaloPanel:用 ESP32-C2 打造超低成本智能家居面板

项目简介 在生活品质日益提升的今天&#xff0c;智能家居系统已经走进了千家万户&#xff0c;并逐渐成为现代生活的一部份。与此同时&#xff0c;一款设计精致、体积轻盈、操作简便的全屋智能家居控制面板&#xff0c;已经成为众多家庭的新宠。这种高效、直观的智能化的解决方…

Hadoop生态圈框架部署(四)- Hadoop完全分布式部署

文章目录 前言一、Hadoop完全分布式部署&#xff08;手动部署&#xff09;1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 hdfs-site…

数据分析SPSS面试题及参考答案

目录 SPSS 的全称是什么? SPSS 的主要用途是什么? 如何打开 SPSS 数据文件? 什么是数据视图和变量视图?它们的作用分别是什么? 如何定义变量的类型、标签和值? SPSS 中支持哪些数据类型? SPSS 中如何处理缺失值? 解释一下 SPSS 中缺失值的处理方法有哪些? 描…

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结&#xff0c;展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式&#xff0c;和业务规则。使用一个强大的数据模型模式的数据建模&#xff0c;评估特定与广义模型的优缺点&#xff0c;有助于你改…

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan进阶之Mongodb未授权访问

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

Golang--流程控制

1、分支结构 1.1 if分支 单分支 语法&#xff1a;if 条件表达式 { 逻辑代码 } 当条件表达式为true时&#xff0c;就会执行代码块的代码。条件表达式左右的()可以不写&#xff0c;也建议不写 if和表达式中间&#xff0c;一定要有空格在Golang中&#xff0c;{}是必须有的,就算你…

【补补漏洞吧 | 02】等保测评ZooKeeperElasticsearch未授权访问漏洞补漏方法

一、项目背景 客户新系统上线&#xff0c;因为行业网络安全要求&#xff0c;需要做等保测评&#xff0c; 通过第三方漏扫工具扫描系统&#xff0c;漏扫报告显示ZooKeeper和 Elasticsearch 服务各拥有一个漏洞&#xff0c;具体结果如下&#xff1a; 1、ZooKeeper 未授权访问【…

YOLOv6-4.0部分代码阅读笔记-yolo.py

yolo.py yolov6\models\yolo.py 目录 yolo.py 1.所需的库和模块 2.class Model(nn.Module): 3.def make_divisible(x, divisor): 4.def build_network(config, channels, num_classes, num_layers, fuse_abFalse, distill_nsFalse): 5.def build_model(cfg, num_cla…

Serverless + AI 让应用开发更简单

本文整理自 2024 云栖大会&#xff0c;阿里云智能高级技术专家&#xff0c;史明伟演讲议题《Serverless AI 让应用开发更简单》 随着云计算和人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;企业对于高效、灵活且成本效益高的解决方案的需求日益增长。本文旨在…

conda迁移虚拟环境路径

方法一&#xff1a;使用软连接 ln -s ~/Anaconda3/envs /new/path/envs 方法二&#xff1a;修改~/.condarc文件 1.打开~/.condarc文件 #添加下面参数 envs_dirs: - /newpath/anaconda3/envs pkgs_dirs: - /newpath/anaconda3/pkgs 2. source ~/.bashrc 3.查看是否成功con…

从0开始学PHP面向对象内容之(类,对象,构造/析构函数)

上期我们讲了面向对象的一些基本信息&#xff0c;这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法&#xff1a; <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…

(八)JavaWeb后端开发——Tomcat

目录 1.Web服务器概念 2.tomcat 1.Web服务器概念 服务器&#xff1a;安装了服务器软件的计算机服务器软件&#xff1a;接收用户的请求&#xff0c;处理请求&#xff0c;做出响应web服务器软件&#xff1a;在web服务器软件中&#xff0c;可以部署web项目&#xff0c;让用户通…

CSS3新增边框属性(五)

1、新增边框属性 1.1 border-radius 设置盒子的圆角。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>border-radios</title><style>div {height: 400px;width: 400px;border: 1px so…

【Linux系列】Linux 和 Unix 系统中的`set`命令与错误处理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

代码随想录刷题学习日记

仅为个人记录复盘学习历程&#xff0c;解题思路来自代码随想录 代码随想录刷题笔记总结网址:代码随想录 递归函数什么时候需要返回值&#xff1f;什么时候不需要返回值&#xff1f; 如果需要搜索整棵二叉树且不用处理递归返回值&#xff0c;递归函数就不要返回值。 如果需要…