iOS 7中UINavigation Back Button的自定义图像

Maj*_*jid 35 iphone objective-c ios ios6 ios7

我有一个自定义UIBarButtonItem的图像在iOS 6.1中工作正常.但iOS 7有一个tintColor它覆盖我的图像上的这种颜色.如果我设置tintColor[UIColor clearColor]按钮不会一起显示.

如何在iOS 7中显示我的后退按钮,就像在iOS 6中一样?请帮忙?

iOS 6.1

IOS 7

Joh*_*nes 42

您应该使用UINavigationBar上的外观来全局设置自定义后退按钮.

[UINavigationBar appearance].backIndicatorImage = customBackButton;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = customBackButton;
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,customBackButton图像应该使用`imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal`,就像这样`[[UIImage imageNamed:@"imageName"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];`所以它可以显示图像的颜色. (8认同)
  • @EugeneBraginets它肯定适用于iOS 9 (2认同)
  • Xcode/Swift似乎不知道这些,因为它们没有在自动完成中显示,它编译并运行. (2认同)

Nit*_*hel 23

尝试UIBarButtonItem在ios7中这样设置: -

UIImage *temp = [[UIImage imageNamed:@"theImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithImage:temp style:UIBarButtonItemStyleBordered target:self action:@selector(action)];
Run Code Online (Sandbox Code Playgroud)

这是Apple开发中心讨论论坛的原创帖子

为了支持iOS7以及更低版本,您可以检查system-version并设置如下代码: -

UIImage *temp=nil;

if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
{ 
    temp = [UIImage imageNamed:@"btn-back.png"]; 
}
else
{ 
    temp = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal];
 }
Run Code Online (Sandbox Code Playgroud)


lea*_*ner 20

对于那些不想搞乱现有目标动作等的人来说,以下似乎更有意义.只需复制并粘贴即可.这也迫使iOS使用您的图像及其所有的风格 - 而不是简单地使用图像的模板/印象.

- (void)setCustomNavigationBackButton
{
    UIImage *backBtn = [UIImage imageNamed:@"arrow"];
    backBtn = [backBtn imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.navigationItem.backBarButtonItem.title=@"";
    self.navigationController.navigationBar.backIndicatorImage = backBtn;
    self.navigationController.navigationBar.backIndicatorTransitionMaskImage = backBtn;
}
Run Code Online (Sandbox Code Playgroud)

arrow 是你的形象的名称.


Bil*_*han 7

swift版本:

var backBtn = UIImage(named: "return_menu")
backBtn = backBtn?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

self.navigationController!.navigationBar.backIndicatorImage = backBtn;
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtn;
Run Code Online (Sandbox Code Playgroud)

  • 直到我添加"imageWithRenderingMode"才行!谢谢! (2认同)

Rob*_*ips 6

试试这种方式:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationController.navigationBar.backIndicatorImage = [UIImage imageNamed:@"yourImageName.png"];
self.navigationController.navigationBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"yourImageName.png"];
Run Code Online (Sandbox Code Playgroud)

这将在全局色调颜色中创建一个图像蒙版,它将为您提供自己的自定义图标.不适用于彩色图像.