UINavigationBar(導(dǎo)航條)
- 父類(lèi)是UIView
- 一個(gè)UINavigationController(導(dǎo)航控制器)只有一個(gè)導(dǎo)航條,子控制器共用同一個(gè)導(dǎo)航條
- 導(dǎo)航條不一定是由導(dǎo)航控制器本身設(shè)置的
- 導(dǎo)航控制器的導(dǎo)航條高度是44,寬度與屏幕同齊;背景高64,寬度與屏幕同齊
導(dǎo)航控制器與導(dǎo)航條(navigationBar)
導(dǎo)航條本身內(nèi)容(背景圖片設(shè)置等),由導(dǎo)航控制器設(shè)置;子控制器要設(shè)置,需要拿到navigationController.navigationBar設(shè)置
-
一般是在initilize統(tǒng)一設(shè)置
#pragma mark - initilize + (void)initialize { [super initialize]; // 判斷是否是導(dǎo)航控制器本身,子類(lèi)也返回 if(self != [BSNachildViewControllerontroller class])return; // 獲取UINavigationBar外觀 UINavigationBar *bar; // 版本適配 if (IOS_VERSION < 9.0) { // 只獲取這個(gè)類(lèi)本身的導(dǎo)航條,其他導(dǎo)航控制器的導(dǎo)航條不獲取 bar = [UINavigationBar appearanceWhenContainedIn:self, nil]; }else { bar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[self]]; } // 背景圖片 [bar setBackgroundImage:[UIImage zq_loadImageWithContentsOfFileName:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault]; }
導(dǎo)航條(navigationBar)內(nèi)部?jī)?nèi)容(navigationItem):
- 設(shè)置棧頂控制器的導(dǎo)航條標(biāo)題(navigationItem.title),直接拿到UINavigationItem設(shè)置title.
childViewController.navigationItem.title = @"導(dǎo)航條標(biāo)題";
-
設(shè)置navigationItem的titleView,控件位置由系統(tǒng)決定,只能設(shè)置尺寸。
childViewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:image]; -
導(dǎo)航條左右兩邊按鈕模型(UIBarButtonItem):
- 導(dǎo)航條左右兩邊按鈕通過(guò)UIBarButtonItem類(lèi)型的模型管理,修改模型就會(huì)修改按鈕
// 返回按鈕 childViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)]; // 左邊的按鈕 childViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)]; // 右邊的按鈕 childViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)]; // 創(chuàng)建模型 UIBarButtonItem *item0 = [[UIBarButtonItem alloc]initWithCustomView:[[UIImageView alloc] initWithImage:image]; UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithCustomView:[[UIImageView alloc] initWithImage:image]; // 左邊的按鈕數(shù)組 childViewController.navigationItem.leftBarButtonItems = @[item0,item1]; // 右邊的按鈕數(shù)組 childViewController.navigationItem.rightBarButtonItems = @[item0,item1];
** 注意:在iOS7之后,默認(rèn)會(huì)將導(dǎo)航條上按鈕的圖片渲染成藍(lán)色,解決方案詳見(jiàn)UIImage**
導(dǎo)航條上的返回按鈕
- 由上一個(gè)控制器決定。
- 如果上一個(gè)控制器沒(méi)有設(shè)置標(biāo)題,默認(rèn)back
- 如果上一個(gè)控制器設(shè)置標(biāo)題,并且沒(méi)有超過(guò)12個(gè)字符,默認(rèn)返回標(biāo)題和上一個(gè)控制器一致,如果超過(guò)12個(gè)字符,就會(huì)變成back。
- 修改返回按鈕設(shè)置上一個(gè)控制器的backBarButtonItem屬性,或者設(shè)置自身的leftBarButtonItem屬性
// 設(shè)置上一個(gè)控制器的backBarButtonItem childViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)]; // 設(shè)置自身的leftBarButtonItem屬性 pushViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];- 覆蓋了系統(tǒng)的返回按鈕,側(cè)滑返回功能也會(huì)消失,恢復(fù)該功能請(qǐng)見(jiàn)拖動(dòng)手勢(shì)-邊緣側(cè)滑返回手勢(shì)