zoukankan      html  css  js  c++  java
  • 解决iOS11导航栏返回按钮问题(重叠、拉伸)

       转载请注明出处!!!

    昨天遇到了一个奇葩的问题,在解决后记录一下。以便之后解决同类问题和帮助他人。

    在昨天写的小demo中,我声明了一个父类。没有自定义导航栏,只是想把返回按钮图片颜色改变一下。于是使用的是系统的导航栏。

    之前的写法 会出问题

    //之前的写法
    //
    初始化导航栏

    #define NAV_LEFTBUTTON_ICON [UIImage imageNamed:@"nav_left"]

    - (void)initNavgationBar {
        //ios 默认translucent为yes,设置后坐标的零点在(0,0),如果想设置成(0,64)的话,添加下面一行代码
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.automaticallyAdjustsScrollViewInsets = NO;
        
        //导航栏标题颜色和字体大小
        [self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:NAV_TITLE_COLOR,NSForegroundColorAttributeName,NAV_TITLE_FONT, NSFontAttributeName,nil]];
        
        //导航栏默认返回按钮
        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(clickButtonNavLeft)];
        [backButton setBackButtonBackgroundImage:[NAV_LEFTBUTTON_ICON resizableImageWithCapInsets:UIEdgeInsetsMake(0, NAV_LEFTBUTTON_ICON.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        self.navigationItem.backBarButtonItem = backButton;
    }

    看红色部分之前是这样写的。网上的方法一般也是这样处理的。但是这样写在iOS11中会出问题。效果如图。

    在这里我们会看到系统的返回按钮没有隐藏 只是去掉了文字,而且图片有拉伸。拉伸好解决,只要设置图片origin就行。

     [NAV_LEFTBUTTON imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]

    但是这样还是有问题就是系统返回箭头不消失。

    效果就是上图这样。那么如何解决这个问题?

    网上的方法比较low。只是把tintcolor改成了透明 不显示。

    我开始试了试 但是在父类Controller中(继承与UIviewController,没有继承导航栏控制器)手动修改tintColor没效果。那么如何解决这个问题呢?

    初始化方法一样,下面就有些不一样了。

    //导航栏默认返回按钮
        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(clickButtonNavLeft)];
    
        self.navigationController.navigationBar.backIndicatorImage = [NAV_LEFTBUTTON imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [NAV_LEFTBUTTON imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        
        self.navigationItem.backBarButtonItem = backButton;

    这就解决了这个问题。如果还有疑问,请继续联系我。

  • 相关阅读:
    CodeForces
    4.15随笔
    oracle新建用户并赋予权限等
    catch时,获取异常信息
    ORACLE 判断是否为数字类型
    UNION ALL用法
    2019.11.7随笔
    oracle 查询锁表和解锁
    2019.11.1随笔
    oracle拼接子查询返回的多个结果
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/9194513.html
Copyright © 2011-2022 走看看