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;

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

  • 相关阅读:
    【Linux技术】常用的Linux系统调用
    【Linux技术】Windows与Linux系统下的库·初探
    【C/C++】嵌入式程序员应该知道的0X10个C语言问题
    【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
    【Acm】八皇后问题
    【驱动】linux设备驱动·扫盲
    【驱动】linux设备驱动·字符设备驱动开发
    【教程】ubuntu下配置nvc详细教程
    【教程】InstallShield使用完全教程
    【ARM】2410裸机系列-流水灯
  • 原文地址:https://www.cnblogs.com/weicyNo-1/p/9194513.html
Copyright © 2011-2022 走看看