在使用UINavigtionController的时候,经常会弄不清哪些属性是UINavigationController的,哪些属性是UIViewController的。而且在更改导航栏和工具栏的样式的时候,经常会于遇到api使用下去没有效果的情况。总之,一直用得比较混乱,今天要好好做一个总结,把那些常用的功能都搞清楚。
一、如何往导航栏和工具栏添加按钮
1、navigationItem属性
这个属性是UIViewController在UINavigationControllerItem类目下的。
@property(nonatomic,readonly,retain)UINavigationItem
*navigationItem;
// Created on-demand so that a view controller may customize its navigation appearance.
文档的解释:在必要的时候会创建该属性对象,以便于控制器可以定制它自己的导航栏外观。
UINavigationItem有以下属性:
@property(nonatomic,retain)UIBarButtonItem
*leftBarButtonItem;//导航栏左边的按钮,位置与“返回”按钮相同,两者只显示其一
@property(nonatomic,retain)UIBarButtonItem
*rightBarButtonItem;//导航栏右边的按钮
@property(nonatomic,retain)UIBarButtonItem *backBarButtonItem; //如果前面的那个控制器有title内容,则back
button的内容为<title
@property(nonatomic,retain)UIView *titleView;//自定义title的样式
@property(nonatomic,copy)NSArray
*leftBarButtonItems NS_AVAILABLE_IOS(5_0);//使用该属性,能在导航栏左边显示多个按钮
@property(nonatomic,copy)NSArray
*rightBarButtonItems NS_AVAILABLE_IOS(5_0);//类似leftBarButtonItems属性
@property(nonatomic,copy)NSString *title;//给它赋值的效果相当于给控制器的title属性赋值一样
@property(nonatomic,copy)NSString
*prompt; //文字内容会显示在title的上面,这个属性会使得导航栏的高度增加30
@property(nonatomic) BOOL leftItemsSupplementBackButton NS_AVAILABLE_IOS(5_0);//默认值为NO,在leftbutton和backbutton同时存在的情况下,只显示leftbutton;如果设为YES,将会显示backbutton,且backbutton按钮会显示自己的title而不是控制器的title。
@property(nonatomic,assign)BOOL
hidesBackButton;
2、toolbarItems属性
这个属性是UIViewController在UINavigationControllerContextualToolbarItems类目下的。
@property (nonatomic,retain)NSArray
*toolbarItemsNS_AVAILABLE_IOS(3_0);
功能:在UIViewController中创建一系列UIBarButtonItem对象,将这些对象添加到toolbarItems数组中,这些UIBarButtonItem按钮就会显示在控制器底部的工具栏中。
代码如下:
UIBarButtonItem *refreshItem = [[UIBarButtonItem alloc]initWithCustomView:refreshButton]; //每个控制器有自己的toolbaritems属性,管理工具栏的数组 [self setToolbarItems:[NSArray arrayWithObjects:refreshItem, nil]];
二、如何定制导航栏和工具栏的样式
1、导航栏的样式:
navigationBar是UINavigationController的属性
(1)导航栏左右两边的按钮
从ios7开始,tintColor属性只能设置导航栏上按钮的字体颜色,无法影响到导航栏的背景色。
(2)导航栏中间的title
从ios5开始,titleTextAttributes属性可以设置title的字体、颜色、大小等。
例如:
[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont boldSystemFontOfSize:20]}];
NSForegroundColorAttributeName是关键字,表示文字的颜色
NSFontAttributeName表示字体大小和样式。//这里的两个关键字是ios7开始才有的,ios7之前有另外的对应关键字
(3)导航栏的背景
颜色:从ios7开始,导航栏的背景色由barTintColor来设置,它会把状态栏也变成一样的颜色。
背景图:从ios5开始,
- (void)setBackgroundImage:(UIImage
*)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics用于设置导航栏背景图片
2、工具栏的样式:
未完待续。。。
三、NavigationBar的显示困惑
1、leftbutton和backbutton
2、控制器的title和navigationItem的title、titleView
UINavigationController(三)