首页 > 系统 > iOS > 正文

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

2019-10-21 18:41:15
字体:
来源:转载
供稿:网友

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

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

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

ios,去掉,导航栏

     方法二:给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赋值才可以,
注:相关教程知识阅读请移步到IOS开发频道。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表