iOS 11 使用两种方法替换(Method Swizzling)去掉导航栏返回按钮的文字

 更新时间:2018年05月07日 10:36:40   作者:星红  
这篇文章主要介绍了iOS 11 使用方法替换(Method Swizzling)去掉导航栏返回按钮的文字,需要的朋友可以参考下

  方法一:设置BarButtonItem的文本样式为透明颜色,代码如下:

[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateNormal]; 
[[UIBarButtonItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor clearColor]} forState:UIControlStateHighlighted]; 

   此外这种方法会导致title不能居中,被偏移很多,如下所示(虽然不被显示,也占了导航栏左边很大一部分位置)

     方法二:给UIViewController添加类别,然后在load方法里面用Method Swzilling方法替换 交换ViewDidAppear,部分代码如下

+(void)load {
  swizzleMethod([self class], @selector(viewDidAppear:), @selector(ac_viewDidAppear));
}
- (void)ac_viewDidAppear{
  self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                       initWithTitle:@""
                       style:UIBarButtonItemStylePlain
                       target:self
                       action:nil];
  [self ac_viewDidAppear];
}
void swizzleMethod(Class class, SEL originalSelector, SEL swizzledSelector)
{
  // the method might not exist in the class, but in its superclass
  Method originalMethod = class_getInstanceMethod(class, originalSelector);
  Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
  // class_addMethod will fail if original method already exists
  BOOL didAddMethod = class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
  // the method doesn't exist and we just added one
  if (didAddMethod) {
    class_replaceMethod(class, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
  }
  else {
    method_exchangeImplementations(originalMethod, swizzledMethod);
  }
}

注意事项:

要给整个backButtonItem赋值才可以,👇这种方法不行,因为backBarButtonItem默认为空,给nil方法消息,默认声明都不执行(参考官网

self.navigationItem.backBarButtonItem.title = @" ";

leftBarButtonItem 与backBarButtonItem 的显示关系:

有leftBarButtonItem则优先显示当前VC的leftBarButtonItem,无则显示上个VC的backBarButtonItem,再无则显示上个VC的title(参考官网   还是官网解释的清楚)

总结

以上所述是小编给大家介绍的iOS 11 使用两种方法替换(Method Swizzling)去掉导航栏返回按钮的文字,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • iOS实现毫秒倒计时的方法详解

    iOS实现毫秒倒计时的方法详解

    倒计时在我们日常开发中必不可少,最近在公司的一个项目中就遇到了这个需求,本文着重介绍的是利用iOS实现毫秒倒计时的方法,文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起学习学习吧。
    2017-04-04
  • iOS9 系统分享调用之UIActivityViewController

    iOS9 系统分享调用之UIActivityViewController

    UIActivityViewController类是一个标准的view controller,通个使用这个controller,你的应用程序就可以提供各种服务。本文给大家介绍iOS9 系统分享调用之UIActivityViewController,感兴趣的朋友一起学习吧
    2015-11-11
  • iOS 开发常用宏总结

    iOS 开发常用宏总结

    这篇文章主要介绍了iOS 开发常用宏总结的相关资料,需要的朋友可以参考下
    2016-09-09
  • iOS异步下载图片实例代码

    iOS异步下载图片实例代码

    这篇文章主要介绍了iOS异步下载图片实例代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • IOS 百度糯米客户端登录BUG

    IOS 百度糯米客户端登录BUG

    这篇文章主要介绍了IOS 百度糯米客户端登录BUG,问题分析及解决方案,本文介绍的非常详细,具有参考价值,特此分享供大家学习
    2016-01-01
  • Xcode 8打印log日志的问题小结及解决方法

    Xcode 8打印log日志的问题小结及解决方法

    这篇文章主要介绍了Xcode 8打印log日志的问题小结及解决方法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • IOS登录页面动画、转场动画开发详解

    IOS登录页面动画、转场动画开发详解

    本篇文章通过详细的步骤给大家详细讲述了IOS登录页面动画、转场动画开发的详细教程,有兴趣的朋友参考学习下。
    2018-01-01
  • iOS开发中使用Quartz2D绘图及自定义UIImageView控件

    iOS开发中使用Quartz2D绘图及自定义UIImageView控件

    这篇文章主要介绍了iOS开发中使用Quartz2D绘图及自定义UIImageView控件的方法,代码基于传统的Objective-C,需要的朋友可以参考下
    2015-11-11
  • IOS 缓存文件的清除实现代码

    IOS 缓存文件的清除实现代码

    这篇文章主要介绍了IOS 缓存文件的清除的相关资料,详细说明了如何获取缓存文件,及缓存文件的清除步骤,需要的朋友可以参考下
    2016-10-10
  • 简介Objective-C解析XML与JSON数据格式的方法

    简介Objective-C解析XML与JSON数据格式的方法

    这篇文章主要介绍了Objective-C解析XML与JSON数据格式的方法,文中解析JSON包括拼接JSON字符串用到了SBJson这个解析器,需要的朋友可以参考下
    2016-01-01

最新评论