美文网首页
ios 导航栏返回按钮点击不灵敏问题

ios 导航栏返回按钮点击不灵敏问题

作者: 胖红Red | 来源:发表于2017-10-24 17:59 被阅读624次
    1.导航栏图层变化

    ios10以前

    ios11

    在iOS11之后,苹果添加了新的类来管理,navigationBar会添加在_UIButtonBarStackView上面,而_UIButtonBarStackView则添加在_UINavigationBarContentView上面;如果没有给titleView赋值,则titleView会直接添加在_UINavigationBarContentView上面,如果赋值给了titleView,则会新生成_UITAMICAdaptorView,把titleView添加在这个类上面,这个类会添加在_UINavigationBarContentView上面,

    2.边距

    1)如果只是设置了titleView,没有设置barbutton,把titleview的宽度设置为屏幕宽度,则titleview距离屏幕的边距,iOS11之前,在iPhone6p上是20p,在iPhone6p之前是16p;iOS11之后,在iPhone6p上是12p,在iPhone6p之前是8p。

    2)如果只是设置了barbutton,没有设置titleview,则在iOS11里,barButton距离屏幕的边距是20p和16p;在iOS11之前,barButton距离屏幕的边距也是20p和16p。

    3)如果同时设置了titleView和barButton,则在iOS11之前,titleview和barbutton之间的间距是6p,在iOS11上titleview和barbutton之间无间距

    3.手机在升级ios11之后 导航返回按钮变的特别不灵敏,个人的处理方案是:

    在iOS11之前,可以设置一个width为负的navigationBarButton,将按钮挤到边缘,变相实现0边距的导航栏按钮,但是,这招在iOS11失效了,原因在于_UIButtonBarStackView,这个iOS9之后出来的,用来相对布局的组件,限制了子view的布局

    ios10 之前原来的方案:

         UIButton *btnLeft = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20,20)];
        [btnLeft setTitle:@"" forState:UIControlStateNormal];
        [btnLeft setBackgroundImage:ImageNamed(@"navigationBar_popBack") forState:UIControlStateNormal];
        btnLeft.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
            [btnLeft addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];        
        UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btnLeft];
        
        UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                           initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                           target:nil action:nil];
        negativeSpacer.width = -5;
        [self.navigationItem setLeftBarButtonItems:@[negativeSpacer,leftItem]];
    

    iOS 11之后做了以下调整:

        UIButton *btnLeft = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30,44)];
        [btnLeft setTitle:@"" forState:UIControlStateNormal];
        [btnLeft setImage:ImageNamed(@"navigationBar_popBack") forState:UIControlStateNormal];
        btnLeft.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
            [btnLeft addTarget:self action:@selector(popVC) forControlEvents:UIControlEventTouchUpInside];        
        UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView:btnLeft];
        
        UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                           initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                           target:nil action:nil];
        negativeSpacer.width = 0;
        [self.navigationItem setLeftBarButtonItems:@[negativeSpacer,leftItem]];
    

    1)将按钮的宽度变大 内容靠左显示

    主要考虑到用户点击的区域 如果靠右显示的话用户点击了那么右边的部分可能没反应 因为到边上了。

    2)设置image 而不是backgroundImage 防止返回箭头变形 这时候可以在原来的基础上 把箭头的切图尺寸稍微放大些比如可以设置(40px*40px)

    3)原来设置了leftspace 为负值 现在将其设置位0 或者直接不要也行。


    注:参考链接:App界面适配iOS11

    相关文章

      网友评论

          本文标题:ios 导航栏返回按钮点击不灵敏问题

          本文链接:https://www.haomeiwen.com/subject/nojxpxtx.html