iOS导航栏背景透明渐变
1.隐藏导航的最下面的线。
2.设置导航背景的不透明度(ios7.0以上不用设置,translucent默认的就是Yes不用修改,但如果别人修改了或出现那种情况,需要设置为Yes)。
3.页面消失时导航恢复原样。
4.滚动时调用方法设置alpha来控制导航背景的渐变(也是核心,重点在这里)。
核心代码如下:
1.将颜色转换为图片
1 2 3 4 5 6 7 8 9 10 11 12 13 | - (UIImage *)imageWithColor:(UIColor *)color { //创建1像素区域并开始图片绘图 CGRect rect = CGRectMake(0, 0, 1, 1); UIGraphicsBeginImageContext(rect.size); //创建画板并填充颜色和区域 CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, rect); //从画板上获取图片并关闭图片绘图 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return image; } |
2.滚动时调用改变导航渐变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | - ( void )changeColor:(UIColor *)color withScrollView:(UIScrollView *)scrollView andValud:(CGFloat)value{ /** if (scrollView.contentOffset.y < 0) { 慎重选择这个,只适用于固定的导航栏,如果是自定义view效果会不一样 //下拉时导航隐藏 self.hidden = YES; }else{ */ self .hidden = NO ; //计算透明度 CGFloat alpha = scrollView.contentOffset.y /value > 1.0f ? 1 : scrollView.contentOffset.y/value; //设置颜色改为图片 UIImage *image = [ self imageWithColor:[color colorWithAlphaComponent:alpha]]; [ self setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; self .translucent = alpha >=1.0f ? NO : YES ; /* }*/ } |
3.隐藏导航栏下的线
1 2 3 4 5 | - ( void )start{ UIImageView *shawImage = [ self findNavLineImageOn: self ]; shawImage.hidden = YES ; self .translucent = YES ; } |
4.页面消失后重置
1 2 3 4 5 | (适用于导航栏不适用于自定义view) UIImageView *shawImage = [ self findNavLineImageOn: self ]; shawImage.hidden = NO ; [ self setBackgroundImage: nil forBarMetrics:UIBarMetricsDefault]; self .translucent = NO ; |
5.参考文章:https://www.jianshu.com/p/10c71cb19b5e
将来的自己,会感谢现在不放弃的自己!
标签:
iOS基础
, UINavigation
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现