UINavigationBar

UINavigationBar(導(dǎo)航條)

  1. 父類(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)

  1. 導(dǎo)航條本身內(nèi)容(背景圖片設(shè)置等),由導(dǎo)航控制器設(shè)置;子控制器要設(shè)置,需要拿到navigationController.navigationBar設(shè)置

  2. 一般是在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):

  1. 設(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):

    1. 導(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è)控制器決定。
    1. 如果上一個(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)];
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容