iOS 11 使用方法替换(Method Swizzling),去掉导航栏返回按钮的文字
2024-08-25 23:27:25
方法一:设置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赋值才可以,
最新文章
- 委托 lambda表达式浅显理解
- red hat关于桥接模式连不上外网或者没有IP
- 跨站请求伪造 CSRF / XSRF<;二:应用>;
- Java mac 上编写Java代码
- Linux - 常用Shell命令
- ElasticSearch实战使用
- Matlab程序怎样打包
- win7常用快捷键
- IOS开发中Xcode常用插件安装与管理(转)
- angular drag and drop (ngDraggable) 笔记
- Linux并发连接上百万的配置
- C++ 内存分配(new,operator new)面面观 (转)
- Navicat的使用
- Android群英传笔记——摘要,概述,新的出发点,温故而知新,可以为师矣!
- 列举Java中常用的包、类和接口
- SQL Challenges
- 【学习总结】GirlsInAI ML-diary day-12-for循环
- JXOJ(基于UOJ)部署日志
- MySQL 8.0X的安装与卸载命令
- Python基础教程之udp和tcp协议介绍
热门文章