引言
在UINavigationBar的类提供了用于导航的分层内容的控制,UINavigaionBar继承于UIView(有关UIView请参照《iOS组件之UIView详解》。这是一间酒吧,通常显示在屏幕的顶部,包含按钮画面的层次结构中导航。主要属性是一个左(后)按钮,一个中心的标题,和一个可选的右按钮。可以使用一个导航栏作为一个独立的对象,或与导航控制器对象来使用。
目录
1、UINavigaionBar 2、UINavigationItem 3、iOS5新增
1、UINavigaionBar
// 设置bar的样式
UIBarStyle barStyle;
// 设置代理
id delegate;
// 设置是否透明(在iOS6中默认为NO,如果barStyle为UIBarStyleBlackTranslucent为YES)
BOOL translucent;
// Pushing a navigation item displays the item’s title in the center of the navigation bar. // 方法将新的UINavigationItem 压入栈
- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;
// 方法将顶部的UINavigationItem 推出栈
- (UINavigationItem *)popNavigationItemAnimated:(BOOL)animated; // Returns the item that was popped.
// 获取顶部的item(只读)
UINavigationItem *topItem;
// 获取返回的item
UINavigationItem *backItem;
// 设置items组
NSArray *items; - (void)setItems:(NSArray *)items animated:(BOOL)animated;
// 设置背景颜色
UIColor *tintColor;
// 设置背影颜色(iOS7.0新增)
UIColor *barTintColor;
iOS5新增
// 根据屏幕状态设置背景图片
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics; 如果支持竖屏,那么应该设置UIBarMetricsDefault [navBar setBackgroundImage:[UIImage imageNamed:@"navBarBg.png"] forBarMetrics:UIBarMetricsDefault]; 如果支持横屏,那么应该设置UIBarMetricsLandscapePhone [navBar setBackgroundImage:[UIImage imageNamed:@"navBarBg.png"] forBarMetrics:UIBarMetricsLandscapePhone];
// 根据屏幕状态获取背景图片
- (UIImage *)backgroundImageForBarMetrics:(UIBarMetrics)barMetrics;
// 对titleText设置字体属性
NSDictionary *titleTextAttributes;
// 根据屏幕状态设置标题的垂直偏移量
- (void)setTitleVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics;
// 根据屏幕状态获得标题的垂直偏移量
- (CGFloat)titleVerticalPositionAdjustmentForBarMetrics:(UIBarMetrics)barMetrics;
iOS6新增
// 设置阴影图片
UIImage *shadowImage;
iOS7新增
// iOS7下设置背景图片(iOS上默认是64,可以通过这个方法设置成44)。
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics;
// 获取图片
- (UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics;
// 如果想要用自己的图片替换V型,可以设置图片的backIndicatorImage backIndicatorTransitionMaskImage。
UIImage *backIndicatorImage; UIImage *backIndicatorTransitionMaskImage; 如下代码所示: [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"backBtton.png"]]; [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"backBtton.png"]];
UINavigationBarDelegate协议(可选) // 是否支持pushItem,如果返回NO就不能。
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item;
// pushItem时会调用的函数
- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item;
// 是否支持popItem,如果返回NO就不能。
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
// popItem时会调用的函数
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;
2、UINavigationItem
// 初始化item的title
- (id)initWithTitle:(NSString *)title;
// 设置item的title
NSString *title;
// 设置返回barButtonItem
UIBarButtonItem *backBarButtonItem;
// 设置titleView
UIView *titleView;
// 一个显示在顶部导航栏的单行文本
NSString *prompt;
// 是否隐藏返回按钮
BOOL hidesBackButton;
// 隐藏返回按钮
- (void)setHidesBackButton:(BOOL)hidesBackButton animated:(BOOL)animated;
// 设置左边按钮
UIBarButtonItem *leftBarButtonItem; - (void)setLeftBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
// 设置右边按钮
UIBarButtonItem *rightBarButtonItem; - (void)setRightBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
3、iOS5新增
NSArray *leftBarButtonItems; NSArray *rightBarButtonItems; - (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated; - (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated;
// 当某个UIViewController自定义了LeftBarButtonItem(如:返回首页的Home按钮),同时这个UIViewController存在被其他UIViewController,pushViewController(即:从其他试图控制器,跳转到自定义LeftBarButtonItem的试图控制器),这时如果没有在自定义LeftBarButtonItem设置UINavigationItem的属性leftItemsSupplementBackButton,那么系统会默认为NO,那麽其他控制器跳转到此控制器时,导航栏就只会展示你自定的LeftBarButtonItem,而不会显示后退按钮。但这样很不友好。如果想显示后退按钮,这在自定义LeftBarButtonItem时,设置UINavigationItem的属性leftItemsSupplementBackButton为YES即可。
BOOL leftItemsSupplementBackButton;