美文网首页iOS DeveloperIOS
[iOS]导航栏颜色设置

[iOS]导航栏颜色设置

作者: Mousses | 来源:发表于2017-02-15 17:45 被阅读259次

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

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

    #import <UIKit/UIKit.h>
    @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]导航栏颜色设置

        本文链接:https://www.haomeiwen.com/subject/hewqwttx.html