IOS leftBarButtonItem 难以点击问题简单处理

在开发中遇到这样一个问 题,自定义的导航栏左键,在 IOS11以后很难点击中,很影响用户体验,经过分析以及参考其他内容后,暂时解决;

问题原因分析:引用参考里的图片:


IOS leftBarButtonItem 难以点击问题简单处理_第1张图片

IOS11之前:

是上面的结构,虽然,UIButton起点也是在20像素,但是因为其中"_UINavigationBarBackIndicatorView",在视图中是透明的,占了前面12像素空间,而神奇的是,点击前面的空间相当于 点击了这个_UINavigationBarBackIndicatorView,这个会响应 自定义的back事件,因此IOS11以下点击左边空白区域是能响应的.


IOS leftBarButtonItem 难以点击问题简单处理_第2张图片

IOS11之后:_UINavigationBarBackIndicatorView,没了,等于前面的20像素真的是空白了,而一般人都会按左上角边缘区域,因为给人很难点击的感觉;


解决目标:让用户点击左边20像素时也能响应消息;

解决方法:旧有的FIXEDSPACE不行了,这也是搜索中找到的最常办法,参考文中的方法,1写一个自己的UIViewController,处理相关内容:

1.(可选),根据是否11以上扩大点击区域,我的点击区域目标是0-84,IOS11以下我设的是64,那么IOS11以上设成84,因为要左移20像素;

IOS leftBarButtonItem 难以点击问题简单处理_第3张图片

2.必要,改变Stack的起始位置

2.1通过约束去修改,直接改坐标,会在pushViewControler 时恢复.调用时机:

-(void)viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];

    [self resetLeftBtnX];

}

2.2 当popViewControllerAnimated时会恢复,看其他同行的文章,说在viewWillAppear中加入,试过不行,而且返回时不调用:viewDidLayoutSubviews,暂时的解决办法:在viewWillAppear中,强制重新layout,暂时解决;

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:YES];

    if(IS_IOS_11_PLUS) {

        [self.view setNeedsLayout];

    }

}


IOS leftBarButtonItem 难以点击问题简单处理_第4张图片

由于我只是改点击,所以只要上述操作就可以了.这样,前面的20像素也能响应点击事件了.


参考:

https://www.jianshu.com/p/383cdad95a32

https://blog.csdn.net/spicyshrimp/article/details/78201042

https://blog.csdn.net/spicyShrimp/article/details/77891717

你可能感兴趣的:(IOS leftBarButtonItem 难以点击问题简单处理)