导航栏背景色设置

比较简单的方式是,直接设置导航栏的tintColor 如下:

self.navigationBar.barTintColor = [UIColor orangeColor];
barTintColor.png

但设置后会发现,实际显示的颜色与自定义的颜色会有误差。

问题原因:默认情况下,在 navigationBar 的上面还覆盖着一个 visualeffectView,它会对导航栏背景进行模糊渲染,从而造成颜色变化。要解决这个问题,有如下两种方法:

方法一

设置导航栏的背景图片(backgroundImage),那么 barTintColor 就会自动失效。注意:设置导航栏的背景图片后,布局就会从导航栏下面开始了(控制器的 view会下移(64或88)) 。如下图:


9D766E8E-42D8-4767-9398-49B781A8C0AE.png

导航栏控制器代码

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationBar.barTintColor = [UIColor blueColor];
    UIImage *image = [self imageWithColor:[UIColor orangeColor]];
    [self.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

// 根据颜色生成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));
    // 返回UIImage
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    // 结束上下文
    UIGraphicsEndImageContext();
    return image;
}

视图控制器代码

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat width = [UIScreen mainScreen].bounds.size.width;
    self.navigationItem.title = @"导航栏";

    UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 100, width, 40)];
    view2.backgroundColor = [UIColor greenColor];
    [self.view addSubview:view2];
}

方法二

设置导航栏的translucent设置为NO能达到同样的效果。(同样控制器的 view会下移(64或88)) 。如下图:


9D766E8E-42D8-4767-9398-49B781A8C0AE.png

导航栏控制器代码

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationBar.barTintColor = [UIColor orangeColor];
    self.navigationBar.translucent = NO;
}

[参考链接]http://www.hangge.com/blog/cache/detail_2220.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,070评论 4 61
  • 原文链接:http://blog.csdn.net/qq_22329521/article/details/750...
    越长越圆阅读 682评论 0 0
  • 非关风月 ,只为真心。 一个是你 ,一个是我 。 你懂我的思绪 , 无关风花雪月 。 只为抛开俗念听听内心的声音...
    泡沫_33af阅读 365评论 0 0
  • 1. 月光皎洁的深夜,空旷的川延高中静谧得像漂浮在海里的古老城堡,仔细...
    秀外慧中的大猪蹄子阅读 1,406评论 0 0

友情链接更多精彩内容