返回按钮不显示标题
方法一:
在跳转到下一个控制器之前,设置返回按钮的标题为空
// 设置返回按钮标题为空
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil];
// 在push到下一个控制器
[self.navigationController pushViewController:[ViewController2 new] animated:YES];
iOS11之前
点击区域为选中的区域;
在标题显示的情况下,这个区域会跟随返回按钮的标题长度发生变化,同样会使控制器的title
向右偏移;
但是,将标题置空之后,返回按钮的区域大小就是固定的,控制器标题过长时,从 61 的位置开始
iOS11
点击区域为选中的区域内部结构如下:
如何隐藏所有界面的返回按钮标题
思路:
hook viewDidLoad
方法,设置返回按钮标题为空
+ (void)load {
NSArray *selStringsArray = @[
@"viewDidLoad"
];
// 在笔记《运行时常用方法封装》查看方法的实现
[self lg_swizzleInstanceMethodList:selStringsArray prefix:@"ag_"];
}
- (void)ag_viewDidLoad {
// 返回按钮标题置空
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleDone target:nil action:nil];
}
方法二:全局设置
使用下面方法设置返回按钮标题的偏移量,达到隐藏返回按钮标题的效果
- (void)setBackButtonTitlePositionAdjustment:(UIOffset)adjustment forBarMetrics:(UIBarMetrics)barMetrics NS_AVAILABLE_IOS(5_0) UI_APPEARANCE_SELECTOR __TVOS_PROHIBITED;
typedef NS_ENUM(NSInteger, UIBarMetrics) {
// 竖屏横屏都有,横屏导航条变宽,则自动repeat图片
UIBarMetricsDefault,
// 竖屏没有,横屏有,相当于之前老iOS版本里地
UIBarMetricsCompact,
UIBarMetricsDefaultPrompt = 101, // Applicable only in bars with the prompt property, such as UINavigationBar and UISearchBar
UIBarMetricsCompactPrompt,
UIBarMetricsLandscapePhone NS_ENUM_DEPRECATED_IOS(5_0, 8_0, "Use UIBarMetricsCompact instead") = UIBarMetricsCompact,
UIBarMetricsLandscapePhonePrompt NS_ENUM_DEPRECATED_IOS(7_0, 8_0, "Use UIBarMetricsCompactPrompt") = UIBarMetricsCompactPrompt,
};
实现:
将返回按钮标题进行x方向上的偏移
UINavigationBar *navBar = [UINavigationBar appearance];
[item setBackButtonTitlePositionAdjustment:UIOffsetMake(-400, 0)
forBarMetrics:UIBarMetricsDefault];
注意:
1,偏移方向:
设置偏移量的时候,我们即可以设置x方向的偏移,也可以设置y方向的偏移。实际使用中,如果设置y方向的偏移,在iOS11中存在问题,iOS11之前则是正常的。因此选择设置x轴方向进行偏移2,偏移量大小:
a,网上很多方法设置偏移量为UIOffsetMake(NSIntegerMin, NSIntegerMin)
,但是在 app switcher 的过程中,软件会出现透明或者闪屏的情况;经过后来的测试,发现不是必现的,但为了避免,我们设置一个固定的值
b,在x轴上偏移时,如果偏移量太小,上一个控制器的title
过长时,返回按钮的标题会显示出来
问题
1,控制器标题过长时
1,在iOS 11,控制器标题过长时,标题会偏移到返回按钮的区域
2,在iOS 11之前,返回按钮的标题如果过长,会影响到title(或titleView)的位置
3,标题无法显示完整,这不是我们想要的
对比:
方法一:
缺点:
只能设置当前控制器的返回按钮标题为空,因此每个控制器都需要进行设置
优点:
iOS11以前,返回按钮的大小是固定的,不会受到上一个控制器标题长度的影响
方法二
缺点:
上一个控制器的标题长度会影响到返回按钮的大小,title(或者titleView)的位置会收到影响
优点:
全局设置,只需要设置一次即可