返回按钮不显示标题


方法一:

在跳转到下一个控制器之前,设置返回按钮的标题为空

// 设置返回按钮标题为空
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)的位置会收到影响

优点:

全局设置,只需要设置一次即可

results matching ""

    No results matching ""