美文网首页小知识
ios自定义图片替换系统导航栏返回按钮样式

ios自定义图片替换系统导航栏返回按钮样式

作者: 66be37b2096c | 来源:发表于2016-05-05 11:02 被阅读7600次

    很多情况下的设计使得我们不能使用系统导航栏自带的返回按钮样式,而我们又不想自定义导航栏,这要怎么办呢?网上给的很多办法都是自定义导航栏的leftBarButtonItem,当然这可以解决这个问题,今天我要说的是另外一种方法,网上也有介绍,首先我们看一下系统的效果:


    系统自带样式

    然后给出另外一种方法(注:图片必须为可拉伸图片)


     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];


    很好理解,选择我们要使用的图片替换返回按钮的图片,然后使返回按钮的标题不显示(注:此处在有的机型可能会出现问题,不建议使用此方法,建议写一个UINavigationController的类别处理返回按钮的标题,下面附上方法)。


    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item{

    UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

    item.backBarButtonItem = back;

    return YES;

    }


    最后我们看一下效果:


    替换后样式

    相关文章

      网友评论

      • b34d2d70b44f:我点击返回的时候会发现tabBarItem的位置向左上便宜,1s后又回原位置。这个问题是怎么产生的?
        b34d2d70b44f:已经解决了,iOS12.1的bug,之前iPhoneX出现过,现在所有机型都出现这个问题,加上[[UITabBar appearance] setTranslucent:NO];就好了。
      • leonardni:这里建议写个uiviewcontroller的分类,使用runtime替换原有的viewdidload方法,在替换方法里面调用
        UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
        item.backBarButtonItem = back;
        可以完美解决(1)返回按钮消失 (2)部分界面标题重现的问题
      • leonardni:这个方式有坑啊,会出现有些地方返回按钮不见的情况,有些地方标题又出现的情况
      • 空忆己:楼主您好,我按您的方法替换返回图片后,图片的左边有一个框框是怎么回事呢?
      • 正直的豆豆:你好,按照你的方法,我换的图片出现了两条横细线,,这什么原因?
        liujieyuu:@正直的豆豆 NSDictionary *backButtonTextAttributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], [UIFont boldSystemFontOfSize:15.0f], NSFontAttributeName,[UIColor darkGrayColor],nil];
        [[UIBarButtonItem appearance] setTitleTextAttributes:backButtonTextAttributes forState:UIControlStateNormal];
        [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

        [[UIBarButtonItem appearance] setTitleTextAttributes:backButtonTextAttributes forState:UIControlStateNormal];
        [[UIBarButtonItem appearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
        正直的豆豆:@liujieyuu 不知道怎么解决
        liujieyuu:我也一样,多出来两条线
      • 傑_Dream:楼主用这个方法有遇到过 有时会出现返回按钮不见的情况
        傑_Dream:@weed_x 我的邮箱857843290@qq.com 谢谢
        傑_Dream:@weed_x 可以给个demo看看么 使用UINavigationController的子类做定制的导航效果
        66be37b2096c:@傑_Dream 这种情况没有碰到过,不排除有这种情况存在,很久没有用过这个方法了,现在一直使用UINavigationController的子类做定制的导航效果
      • 伦敦乡下的小作家:替换之后,返回按钮的图片超级大,是不是图片的问题?是不是我的图片是不可拉伸导致的??
        周老实:请问你是怎么解决的 我的问题是 按钮偏右了
        伦敦乡下的小作家:@MM小木木 @2x最基本肯定没忘记,已经解决了,图片问题。
        dd05feddcd49:图片名后面加"@2x"试试
      • JornyQi:你好楼主,能给个demo?1024399113@qq.com
      • DanielTse:楼主,具体怎么处理的,看到消息后回复一下。
        66be37b2096c:@DanielTse 这种效果有弊端,建议新建navigationcontroller子类重写pushviewcontroller方法
      • DanielTse:改变navigationItem的backBarButtonItem为自定义按钮,但是我发现这样设置并没有效果,显示的还是原来系统自带的返回按钮。
      • e581edd66fc7:您好,能不能写个demo呢

      本文标题:ios自定义图片替换系统导航栏返回按钮样式

      本文链接:https://www.haomeiwen.com/subject/flldrttx.html