UINavigationBar

一、简介

<<UINavigationBar类实现了一个层次的内容导航控制。它的一个条形栏,通常显示在屏幕上方,包含用于导航的向上和向下一个层次的按钮。主要属性是左(后退)按钮,中心的名称和一个可选的右边的按钮。您可以指定这些自定义视图

<<UINavigationBar类实现了一个层次的内容导航控制。它的一个条形栏,通常显示在屏幕上方,包含用于导航的向上和向下一个层次的按钮。主要属性是左(后退)按钮,中心的名称和一个可选的右边的按钮。您可以指定这些自定义视图。

<<继承关系:UINavigationBar --> UIView -->UIResponder-->NSObject

格式为

1--> 设置UINavigationBar的样式(属性的作用)

typedef NS_ENUM(NSInteger, UIBarStyle) {

    UIBarStyleDefault          = 0,

    UIBarStyleBlack            = 1,

    UIBarStyleBlackOpaque      = 1, // Deprecated. Use UIBarStyleBlack

    UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES

} __TVOS_PROHIBITED;

;(如果属性有枚举类型的话,这里会有枚举类型说明)

navigationBar.barStyle =UIBarStyleBlack;(这是具体的例子)

@property(nonatomic) UIBarStyle barStyle UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED; (这是属性的说明)

二、UINavigationBar的属性(属性的顺序与苹果API一致)

1--> 设置UINavigationBar的样式

typedef NS_ENUM(NSInteger, UIBarStyle) {

    UIBarStyleDefault          = 0,//默认样式

    UIBarStyleBlack            = 1,//黑色

    UIBarStyleBlackOpaque      = 1, // 弃用属性

    UIBarStyleBlackTranslucent = 2, // 弃用属性

} __TVOS_PROHIBITED;

toolBar.barStyle =UIBarStyleBlack;

@property(nonatomic) UIBarStyle barStyle UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED; 

2-->声明UINavigationBarDelegate代理

navigationBar .delegate = self;//声明代理

@property(nullable, nonatomic, weak) id<UINavigationBarDelegate> delegate; //设置UINavigationBarDelegate代理

3-->设置UINavigationBar是否透明

navigationBar.translucent =NO;

@property(nonatomic,assign,getter=isTranslucent) BOOL translucent NS_AVAILABLE_IOS(3_0) UI_APPEARANCE_SELECTOR; //iOS 6和之前,默认情况下为NO。如果barStyle将UIBarStyleBlackTranslucent总是YES。

4、将新的UINavigationItem 压入栈

[navigationBar pushNavigationItem:item animated:NO];

- (void)pushNavigationItem:(UINavigationItem *)item animated:(BOOL)animated;

4、将顶部的UINavigationItem 推出栈

[navigationBar pushNavigationItem:item animated:NO];

- (nullable UINavigationItem *)popNavigationItemAnimated:(BOOL)animated; //

返回已弹出的项。

5、当前push到最上层的item

  UINavigationItem *theTop=[navigationBar topItem];

@property(nullable, nonatomic,readonly,strong) UINavigationItem *topItem;//只读属性

6、仅次于最上层的item,一般式被推向导航栏左侧的item

  UINavigationItem *theTop=[navigationBar backItem];

@property(nullable, nonatomic,readonly,strong) UINavigationItem *backItem;//只读属性

7、获取堆栈中所有item的数组

  NSArray *array=[navigationBar items];

@property(nullable,nonatomic,copy) NSArray<UINavigationItem *> *items;

8、设置一组item

    [navigationBar setItems:items animated:NO];  

- (void)setItems:(nullable NSArray *)items animated:(BOOL)animated;// 如果动画是YES,则模拟一个push或pop,这取决于新的top项目是否在堆栈中。

9、是否显示大标题

self.navigationController.navigationBar.prefersLargeTitles=YES;//这句话表示是否显示大标题

@property (nonatomic, readwrite, assign) BOOL prefersLargeTitles;

10、设置渲染颜色,会影响选中字体和图案的渲染

navigationBar.tintColor=[UIColor redColor];

@property(null_resettable, nonatomic,strong) UIColor *tintColor;

11、设置导航栏的颜色

navigationBar.barTintColor = [UIColor whiteColor];

@property(nullable, nonatomic, strong) UIColor *barTintColor NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;// barTintColor会影响背景颜色, iOS7出现的新属性,用来代替tintColor的作用

12、通过导航栏位置和量度设置背景图片

//设置透明的背景图,便于识别底部线条有没有被隐藏

[navigationBar setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

13、通过导航栏位置和量度获取背景图片

UIImage *image=[navBar backgroundImageForBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

- (nullable UIImage *)backgroundImageForBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;

14、通过导航栏量度设置背景图片

[navigationBar setBackgroundImage:[[UIImage alloc] init] for BarMetrics:UIBarMetricsDefault];

- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

15、通过导航栏量度获取背景图片

 UIImage *image=[navBar backgroundImageForBarMetrics:UIBarMetricsDefault];

- (nullable UIImage *)backgroundImageForBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

16、设置导航栏的阴影图片

[navigationBar setShadowImage:[UIImage new]];

@property(nullable, nonatomic,strong) UIImage *shadowImage NS_AVAILABLE_IOS(6_0) UI_APPEARANCE_SELECTOR;

17、设置导航栏的标题字体属性

navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName:[UIColor redColor]};

@property(nullable,nonatomic,copy) NSDictionary *titleTextAttributes NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

18、设置大标题的文本样式

[self.navigationController.navigationBar setLargeTitleTextAttributes:[NSDictionarydictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,[UIFontsystemFontOfSize:18.0f],NSFontAttributeName,nil]];

@property(nullable, nonatomic, copy) NSDictionary *largeTitleTextAttributes UI_APPEARANCE_SELECTOR API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos);

19、设置导航栏标题的竖直位置偏移

[navBar setTitleVerticalPositionAdjustment:10 forBarMetrics:UIBarMetricsDefault];//adjustment指定了偏移量,正值为向下偏移,负值为向上偏移,如设置当前title向下偏移10个像素

- (void)setTitleVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

20、获取导航栏标题的竖直位置偏移

CGFloat adjust=[navBar titleVerticalPositionAdjustmentForBarMetrics:UIBarMetricsDefault];

- (CGFloat)titleVerticalPositionAdjustmentForBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR;

21、设置背景指示器图片(返回按钮的样式,这两个一起设置)

[[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@"nav_back.png"]];

@property(nullable,nonatomic,strong) UIImage *backIndicatorImage NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;//导航栏左侧pop按钮的图案默认是一个箭头,我们可以使用这个的方法修改

22、设置背景指示器图片(返回按钮的样式,这两个一起设置)

[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"nav_back.png"]];

@property(nullable,nonatomic,strong) UIImage *backIndicatorTransitionMaskImage NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;// 通常你说的这两个方法设置的图片应该是一样的, 除非你想让backbutton在点击后的效果有所不同。

三、UINavigationBar的代理属性

1-->item将要push的时候调用,返回NO,则不能push

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item{

return NO;

}

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item; 

2-->item已经push后调用

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item{

}

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item; // 在动画结束时被调用

3-> item将要pop时调用,返回NO,不能pop

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item{

return NO;

}

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item; 

4-> item已经pop后调用

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item{

}

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;

参考

UINavigationBar 一个有样式的view

ios开发UI 控件——UINavigationBar 与UINavigationController

navigationBar

UInavigationBar上添加左箭头的返回按钮

iOS开发UINavigation——导航控制器UINavigationController

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容