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
看到backBarButtonItem
(UINavigationItemButtonView
) 的宽高都是0,那三个点就是内部的UILabel造成的,因为宽高不够所以显示了... ,这个label的字是系统自动取的上个控制器的title,所以不使用系统自己创建的backBarButtonItem
, 自己创建一个没有title的就可以了
有些文章里面写的是直接判断UINavigationItemButtonView
的class类型然后粗暴的隐藏掉,感觉不是最好的解决方法
知识点:
- 当前控制器展示的backBarButtonItem,是上个控制器的;所以看到上面的label展示的是<密码管理>, 这是堆栈中<修改登录密码>的上个页面
- customView在
backBarButtonItem
中是不生效的
系统的注释:当此属性为nil时,导航项使用其title属性中的值创建适当的后退按钮。
image.png