[iOS]导航栏颜色设置

本文章写来纪念我在做IOS项目时遇到的导航栏之坑。

为了方便调用,在自定义的NavigationController中添加属性:

#import 
@interface ETNavigationController : UINavigationController

@property(nonatomic, strong) UIColor* foregroundColor;

//带有alpha值的背景色
@property(nonatomic, strong) UIColor* backgroundColor;

@end

实现自定义访问器:

-(UIColor *)foregroundColor
{
    return self.navigationBar.tintColor;
}

-(void)setForegroundColor:(UIColor *)foregroundColor
{
    self.navigationBar.tintColor = foregroundColor;
}

-(void)setBackgroundColor:(UIColor *)backgroundColor
{
    _backgroundColor = backgroundColor;
    //这是一个自定义UIImage分类中通过颜色来生成图片的函数
    UIImage* img = [UIImage imageWithColor:backgroundColor];
    [self.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];

    CGFloat alpha;
    [backgroundColor getRed:nil green:nil blue:nil alpha:&alpha];
    BOOL translucent = (alpha < 1);
    self.navigationBar.translucent = translucent;
}

到这已经可以满足设置一般的导航栏颜色的需求~~~,像QQ和淘宝那种下拉变换的导航栏目前没做研究。

还有一点小技巧

如果需要切换页面时对导航栏做(不透明<-->透明)变换,最好在变换的ViewController中做如下设置:

self.extendedLayoutIncludesOpaqueBars = YES;

这个属性,我理解的意思是”使用extendedLayout的情况下,在导航栏不透明时也要把视图延伸到navigationBar下方(将本控制器的view的顶点放在屏幕最上方)“,这样视图的顶部会被不透明的bar完全遮盖。这个理解有点片面,因为只考虑了顶部的navigationBar,实际上如果在底部有toolBar,视图也会延伸到toolBar的下面。

还有一个相关的属性:

edgesForExtendedLayout

它决定了视图布局时在哪些方向上面延伸,默认是所有方向都延伸。

你可能感兴趣的:([iOS]导航栏颜色设置)