在我们平时需要设置UINavigationBar的样式时候,往往是直接通过UINavigationController来调用里面的UINavigationBar来进行设置, 如果要调整UINavigationBar的样式的话,下图可以作为参考
实现代码
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"];