iOS用到的iOS程序猿

iOS 自定义导航栏滑动返回取消后出现三个小点(标题栏错乱)解决

2019-02-14  本文已影响3人  這Er

同事发现在iOS10系统操作滑动返回,然后半路取消后,导航栏会多出三个小点


image.png

解决方法:

viewWillAppear: 方法里面加上几行代码,将title置为空字符串:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    
    if (@available(iOS 11.0, *)) {
        self.navigationItem.hidesBackButton = YES;
    } else {
        self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
        self.navigationItem.hidesBackButton = YES;
    }
}

原因探究:

查看了下图层,明显就是系统默认的返回按钮么:
UINavigationBar -> UINavigationItemButtonView -> UILabel

image.png

看到backBarButtonItem(UINavigationItemButtonView) 的宽高都是0,那三个点就是内部的UILabel造成的,因为宽高不够所以显示了... ,这个label的字是系统自动取的上个控制器的title,所以不使用系统自己创建的backBarButtonItem, 自己创建一个没有title的就可以了

有些文章里面写的是直接判断UINavigationItemButtonView 的class类型然后粗暴的隐藏掉,感觉不是最好的解决方法

知识点:

  1. 当前控制器展示的backBarButtonItem,是上个控制器的;所以看到上面的label展示的是<密码管理>, 这是堆栈中<修改登录密码>的上个页面
  2. customView在backBarButtonItem中是不生效的

系统的注释:当此属性为nil时,导航项使用其title属性中的值创建适当的后退按钮。


image.png
上一篇下一篇

猜你喜欢

热点阅读