陈斌彬的技术博客

Stay foolish,stay hungry

如何清晰高效设置UINavigationBar样式

在我们平时需要设置UINavigationBar的样式时候,往往是直接通过UINavigationController来调用里面的UINavigationBar来进行设置, 如果要调整UINavigationBar的样式的话,下图可以作为参考

img

实现代码

HomeViewController.m

//详细代码不一一列出

//生成UINavigationController实例
UINavigationController *nav = [UINavigationController alloc] init];}

//设置title的文字属性
NSDictionary * dict = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName];

nav.navigationBar.titleTextAttributes = dict;

//背景颜色
nav.navigationBar.barTintColor = [UIColor whiteColor];

//设置背景是否透明
nav.navigationBar.translucent = NO;

但这样写的问题是设置UIView属性的工作应该尽量不要交给Controller去实现,这样对代码阅读和维护性都增加了难度,而且重用性低。那如何分离view属性设置的代码?个人建议就是创建一个子类view,在view的初始化的时候就设置其属性。

创建两个文件BasicNavigationBar.h和BasicNavigationBar.m

BasicNavigationBar.h

#import <UIKit/UIKit.h>

@interface BasicNavigationBar : UINavigationBar

@end

BasicNavigationBar.m

#import "BasicNavigationBar.h"

@implementation BasicNavigationBar

//重写初始化view
- (id)init {

    if (self = [super init]) {
        [self setBasicAttributes];
    }

    return self;
}

/**
 *  @author 老区
 *
 *  @brief  设置基础属性,设置是针对iOS 7.0或以上,7.0以下果断抛弃
 */
- (void)setBasicAttributes {

    //标题属性
    self.titleTextAttributes =  [NSDictionary dictionaryWithObjectsAndKeys:
                          [UIColor whiteColor],NSForegroundColorAttributeName ,//字体颜色
                          [UIFont boldSystemFontOfSize:20],NSFontAttributeName //字体大小和样式
                          , nil];

    //设置背景颜色
    self.barTintColor = [UIColor colorWithRed:0.7255 green:0.1059 blue:0.1098 alpha:1.0];

    //设置背景是否透明
    self.translucent = NO;

    /**
     *  添加更多其它属性设置
     */
}

@end

HomeViewController.m

//生成UINavigationController实例
UINavigationController *nav = [UINavigationController alloc] init];}

/**
 *  @author 老区
 *
 *  这里是关键,设置新的NavigationBar
 */
[nav setValue:[BasicNavigationBar new] forKeyPath:@"navigationBar"];

Resource Reference