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

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

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


IOS11之前:

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


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


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

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

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


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];

    }

}



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


参考:

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 10,291评论 1 9
  • App界面适配iOS11(包括iPhoneX的奇葩尺寸) 一剑孤城关注 2017.08.15 11:15*字数 1...
    珊珊大王阅读 4,776评论 0 2
  • 首先感谢小易童鞋,这里自己也整理下这些容易忘记的代码 设置导航栏的背景颜色用barTintColor self.n...
    HT_Jonson阅读 4,592评论 0 51
  • 1,NSObject中description属性的意义,它可以重写吗?答案:每当 NSLog(@"")函数中出现 ...
    eightzg阅读 9,698评论 2 19
  • 王生 家里的老人说我出生的那天, 屋子外面飞来许多喜鹊, 亲戚们说从来没看过这种场面, 这是大吉大利的征兆, 说我...
    十一府阅读 2,166评论 0 0

友情链接更多精彩内容