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

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

原文地址:https://www.cnblogs.com/weicyNo-1/p/9194513.html