• 解决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;

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

  • 相关阅读:
    js实现完美身份证号有效性验证
    jQuery cookie操作
    脚本化HTTP
    if (HttpContext.Current.User.Identity.IsAuthenticated) 权限验证总是true
    装了appserv之后,浏览器中访问localhost加载不了
    rdlc报表的导出及预览时表头
    oracle中的to_number在mysql中的转换
    GIRDVIEW 控件绑定数据后 后台c#控制隐藏某列
    mysql、oracle 中按照拼音首字母排序
    阅读《大道至简第一章》读后感(java伪代码)
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/9194513.html
Copyright © 2020-2023  润新知