统一设置返回按钮为自定义图片

 每个app都有自己的特色,返回按钮就是其一,但是又不想所有的页面都重新自定义返回按钮,所以就需要统一设置返回按钮。

查了许多资料,找到最简单的方案:设置返回按钮的背景图片为自定义的图片,为了解决会显示Back字样的问题,设置Title偏移到屏幕不可见的位置即可。

把下面代码丢到自定义的tabbar里面就可以了

 UIImage *backImage = [UIImage imageNamed:@"return_back"];

    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[backImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, backImage.size.width, 0, 0)]

                                                      forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-233, 0) forBarMetrics:UIBarMetricsDefault];


有一些特殊的页面标题为红色,蓝色什么的,这又需要你重新自定义返回按钮,新的图片。但是你会发现你自定义的返回按钮会与屏幕间隔了一段距离,好丑哦~

直接贴代码

- (void) addLeftButtonItems{

    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];

    backBtn.frame = CGRectMake(0, 0, 20, 44);

    

    [backBtn setImage:[UIImage imageNamed:@"return_back_white"] forState:UIControlStateNormal];

    [backBtn addTarget:self action:@selector(doBack) forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];

    UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]

                                       initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace

                                       target:nil action:nil];

    negativeSpacer.width = -5;

    self.navigationItem.leftBarButtonItems =  [NSArray arrayWithObjects:negativeSpacer, backItem, nil];

}


-(void)doBack{

    [self.navigationController popViewControllerAnimated:YES];

}


向左移动5个像素差不多就可以实现了。

但是~,到这里,你又会发现一个新的问题,系统自带的滑动返回按钮失效了哦~~
那是因为返回按钮覆盖了滑动手势,这个问题也是可以解决滴~,有一个组件 SwipeBack完美的解决了这个问题,可以查看另一篇文章: UINavigationController返回手势失效问题
http://blog.csdn.net/qq_25303213/article/details/51775302


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值