iOS返回按鈕修改總結(jié)

參考
修改iOS返回按鈕的幾種方式
修改導(dǎo)航欄返回按鈕的文字
iOS11更新 導(dǎo)航返回按鈕偏移的問(wèn)題

第一種

UIImage *backButtonImage = [[UIImage imageNamed:@"back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 25, 0, 0)];

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault];
  • 提示:上面這種方法會(huì)被系統(tǒng)給拉伸,需要在當(dāng)前控制器里面設(shè)置

第二種

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init];
backItem.title = @"";
//主要是以下兩個(gè)圖片設(shè)置
self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"backPic"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"backPic"];        
self.navigationItem.backBarButtonItem = backItem;
  • 提示: 這種方法在父類方法中設(shè)置好使

第三種

//重新創(chuàng)建一個(gè)barButtonItem
UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithTitle:@"你想要設(shè)置的返回按鈕文字" style:UIBarButtonItemStylePlain target:nil action:nil];
//設(shè)置backBarButtonItem即可
self.navigationItem.backBarButtonItem = backItem;
  • 提示:上面這種方式只是修改返回文字而已 至于返回圖標(biāo)還是系統(tǒng)提供的 手勢(shì)滑動(dòng)返回依然存在,并且需要在上級(jí)界面設(shè)置

1、以上三種方法不改變系統(tǒng)手勢(shì)滑動(dòng)返回
2、不能實(shí)時(shí)修改返回按鈕的文字

第四種

//創(chuàng)建一個(gè)UIButton
UIButton *backButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
//設(shè)置UIButton的圖像
[backButton setImage:[UIImage imageNamed:@"left_select_img.png"] forState:UIControlStateNormal];
//[_backButton setTitle:backStr forState:UIControlStateNormal];
//給UIButton綁定一個(gè)方法,在這個(gè)方法中進(jìn)行popViewControllerAnimated
[backButton addTarget:self action:@selector(backItemClick) forControlEvents:UIControlEventTouchUpInside];
//然后通過(guò)系統(tǒng)給的自定義BarButtonItem的方法創(chuàng)建BarButtonItem
UIBarButtonItem *backItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
//覆蓋返回按鍵
self.navigationItem.leftBarButtonItem = backItem;
  • 提示:這種方法會(huì)失去手勢(shì)滑動(dòng)返回的功能

第五種

對(duì) iOS11 導(dǎo)航返回按鈕偏移的問(wèn)題做了處理

@property (strong, nonatomic) UIButton *backButton;

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

- (UIButton *)backButton {
    if (!_backButton) {
        _backButton = [UIButton buttonWithType:UIButtonTypeCustom];
        _backButton.frame = CGRectMake(0, 0, 88, 44);
        [_backButton setImage:[UIImage imageNamed:@"App_back"] forState:UIControlStateNormal];//返回箭頭圖標(biāo)和系統(tǒng)的不一致
        //[_backButton setTitle:backStr forState:UIControlStateNormal];
        [_backButton addTarget:self action:@selector(backItemClick) forControlEvents:UIControlEventTouchUpInside];
        
        if (!SYSTEM_VERSION_LESS_THAN(@"11")) {
            _backButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
            [_backButton setImageEdgeInsets:UIEdgeInsetsMake(0, -5 * APP_WIDTH /375.0,0,0)];
        }
        
        UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_backButton];
        self.navigationItem.leftBarButtonItem = leftBarButtonItem;
    }
    return _backButton;
}

- (void)setBackButton {
    NSString *backStr;
    if ([_unReadMessageNum isEqualToString:@"0"]) {
        backStr = @"消息";
    } else {
        backStr = [NSString stringWithFormat:@"消息(%@)",_unReadMessageNum];
    }
    
    [self.backButton setTitle:backStr forState:UIControlStateNormal];
}

- (void)unReadMessageDidUpdate:(NSNotification *)notification
{
    self.unReadMessageNum = notification.object;
    [self setBackButton];
}

- (void)backItemClick {
    [self.navigationController popViewControllerAnimated:YES];
}
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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