UINavigationBar屬性及返回按鈕更改小結(jié)

有時候這些屬性搞得蠻亂的,記錄下以便查閱

UINavigationBar屬性

  • 如果想統(tǒng)一設(shè)置棚赔,可以通過以下方法帝簇,獲取當前類下的所有對象的導(dǎo)航條,然后在+initialize方法中進行設(shè)置

[UINavigationBar appearanceWhenContainedIn:self, nil];


- 背景圖片
- ![](http://upload-images.jianshu.io/upload_images/608238-72847773e7f3af76.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

```objc
// barMetrics需要設(shè)置成UIBarMetricsDefault
- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics
  • 背景陰影圖片

    @property(nonatomic,retain) UIImage *shadowImage
    
  • 背景顏色

    @property(nonatomic,retain) UIColor *barTintColor
    
  • 標題文字屬性

    @property(nonatomic,copy) NSDictionary *titleTextAttributes;
    
  • 系統(tǒng)類型按鈕文字顏色

    @property(nonatomic,retain) UIColor *tintColor
    
  • 返回按鈕圖片

    // 必須要兩個都設(shè)置靠益,并且圖片要設(shè)置成不渲染
    @property(nonatomic,retain) UIImage *backIndicatorImage;
    

@property(nonatomic,retain) UIImage *backIndicatorTransitionMaskImage;

- 標題垂直偏移
- ![](http://upload-images.jianshu.io/upload_images/608238-7761bd834709f62d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

```objc
- (void)setTitleVerticalPositionAdjustment:(CGFloat)adjustment forBarMetrics:(UIBarMetrics)barMetrics

返回按鈕更改

系統(tǒng)原裝效果:


如果有以下需求:

  • 去除上面返回按鈕上“我是標題”字樣丧肴,并設(shè)置返回圖片為白色
分析
  • 圖片修改
    • 方式1:設(shè)置返回圖片顏色
    • 方式2:直接設(shè)置返回圖片
    • 方式3:使用按鈕覆蓋返回圖片(這種方式會使返回箭頭圖片和左邊距離加大,但可以用取巧的方式調(diào)整)
  • 文字修改
    • 方式1:設(shè)置控制器navigationItem的backBarButtonItem顯示文字為""
    • 方式2:設(shè)置返回按鈕文字偏移量胧后,使其移出屏幕
    • 方式3:采用控制器navigationItem的leftBarButtonItem進行覆蓋
解決

綜合以上說明芋浮,這里給出三種方式(都是針對的自定義UINavigationController):

  • 方式1:在-pushViewController:animated:中設(shè)置文字 ,在+initialize方法中設(shè)置返回圖片或改變返回圖片顏色
    • 注意導(dǎo)航欄對圖片的渲染
  - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    viewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil];

    [super pushViewController:viewController animated:animated];
}
  // 獲取特定類的所有導(dǎo)航條
  UINavigationBar *navigationBar = [UINavigationBar appearanceWhenContainedIn:self, nil];
  
  // 方式1:使用自己的圖片替換原來的返回圖片
  navigationBar.backIndicatorImage = [UIImage imageNamed:@"NavBack"];
  navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"NavBack"];

  // 方式2:設(shè)置返回圖片顏色
  navigationBar.tintColor = [UIColor whiteColor];
  • 方式2:在+initialize方法中設(shè)置所有返回按鈕文字的偏移量壳快,其他設(shè)置和方式1一致
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -100) forBarMetrics:UIBarMetricsDefault];
  • 方式3.重寫-pushViewController:animated:方法,使用控制器的navigationItem的leftBarButtonItem覆蓋返回按鈕
    • 需要判斷是否為根控制器纸巷,如果是根控制器就不添加
      • 導(dǎo)航控制器的viewControllers.count不為0即表示傳入的為非根控制器
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count != 0) {
        viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"NavBack"] style:UIBarButtonItemStyleDone target:self action:@selector(back)];
    }

    [super pushViewController:viewController animated:animated];
}
    - (void)back
    {
    [self popViewControllerAnimated:YES];
    }
方案對比
  • 方案1和方案2改動較小江醇,對系統(tǒng)自帶的返回功能無影響。
  • 方式3靈活性最高何暇,但是會使系統(tǒng)的滑動返回失效,需要自己實現(xiàn)凛驮,具體實現(xiàn)參照forkingdog全屏手勢分類
  • 方式3還會使按鈕更加偏向右邊:



通過以下方式可以使按鈕向左邊靠:

  • 采用customView裆站,添加自己定義的UIButton
...
// 返回按鈕內(nèi)容左靠
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

// 讓返回按鈕內(nèi)容繼續(xù)向左邊偏移10
button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
...
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市黔夭,隨后出現(xiàn)的幾起案子宏胯,更是在濱河造成了極大的恐慌,老刑警劉巖本姥,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩袍,死亡現(xiàn)場離奇詭異,居然都是意外死亡婚惫,警方通過查閱死者的電腦和手機氛赐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來先舷,“玉大人艰管,你說我怎么就攤上這事〗ǎ” “怎么了牲芋?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捺球。 經(jīng)常有香客問我缸浦,道長,這世上最難降的妖魔是什么氮兵? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任裂逐,我火速辦了婚禮,結(jié)果婚禮上胆剧,老公的妹妹穿的比我還像新娘絮姆。我一直安慰自己,他們只是感情好秩霍,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布篙悯。 她就那樣靜靜地躺著,像睡著了一般铃绒。 火紅的嫁衣襯著肌膚如雪鸽照。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天颠悬,我揣著相機與錄音矮燎,去河邊找鬼定血。 笑死,一個胖子當著我的面吹牛诞外,可吹牛的內(nèi)容都是我干的澜沟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼峡谊,長吁一口氣:“原來是場噩夢啊……” “哼茫虽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起既们,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤濒析,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啥纸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體号杏,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年斯棒,在試婚紗的時候發(fā)現(xiàn)自己被綠了盾致。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡名船,死狀恐怖绰上,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渠驼,我是刑警寧澤蜈块,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站迷扇,受9級特大地震影響百揭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜓席,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一器一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧厨内,春花似錦祈秕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瞭亮,卻和暖如春方仿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工仙蚜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留此洲,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓委粉,卻偏偏與公主長得像呜师,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贾节,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容