iOS 导航栏颜色差异及下面有一条黑线

导航栏颜色差异:

设置导航栏的 translucent 属性为 NO

在单个界面设置

self.navigationController.navigationBar.translucent = NO;

如果是导航栏单独设置

 UINavigationBar * nav = [UINavigationBar appearance];
   //设置背景色
    nav.translucent = NO;
    nav.barTintColor = ColorPrimary;
 //设置字体颜色
    NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
    textAttrs[NSForegroundColorAttributeName] = White;
    [nav setTitleTextAttributes:textAttrs];
    [nav setTintColor:[UIColor whiteColor]];

对于导航栏和下面controller中间有一条线的情况,解决办法是设置ShadowImage 属性,但是这个属性是设置那条线的显示情况,单独设置是不起作用的,只有同时设置 self.navigationController.navigationBar 的背景色才能起作用,所以这里设置self.navigationController.navigationBar 的背景色为空白图片,并且把 ShadowImage设置为空白图片 这样就不会显示出来那条黑线了,如果想把那条黑线改为其他颜色只需要修改 ShadowImage的图片就可以了

对于单个界面

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
//两句代码必须都有
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"无图片"] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];
}
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
//两句代码必须都有
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"无图片"] forBarMetrics:UIBarMetricsDefault];
    [self.navigationController.navigationBar setShadowImage:nil];
}

如果是全局设置(在UINavigationBar的封装类里面设置就可以了)

//两句代码必须都要有
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"无图片"] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setShadowImage:[UIImage new]];

你可能感兴趣的:(iOS 导航栏颜色差异及下面有一条黑线)