【问题标题】:Custom image for UINavigation Back Button in iOS 7iOS 7 中 UINavigation 后退按钮的自定义图像
【发布时间】:2013-09-25 14:21:02
【问题描述】:

我有一个自定义的UIBarButtonItem,其图像在 iOS 6.1 中运行良好。但是 iOS 7 有一个tintColor,它会将这种颜色覆盖在我的图像上。如果我将tintColor 设置为[UIColor clearColor],则按钮不会一起显示。

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

【问题讨论】:

  • 您不应将条形按钮项用作后退按钮。而是为导航栏设置backIndicatorImage
  • 应用程序必须在所有 iOS 版本中具有相同的外观。 backIndicatorImage 仅适用于 iOS 7。我已经在 iOS 6 中使用了 mask const float colorMask[6] = {222, 255, 222, 255, 222, 255}; UIImage *image = [UIImage imageWithCGImage: CGImageCreateWithMaskingColors([[UIImage alloc] init].CGImage, colorMask)]; [backButtonItem setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
  • 我用的是ios5,你能帮帮我吗

标签: iphone ios objective-c ios6 ios7


【解决方案1】:

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

[UINavigationBar appearance].backIndicatorImage = customBackButton;
[UINavigationBar appearance].backIndicatorTransitionMaskImage = customBackButton;

【讨论】:

  • 我想添加customBackButton图像应该使用imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal,像这样[[UIImage imageNamed:@"imageName"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];这样它可以显示图像的颜色。
  • 对 iOS 9 无效:没有 backIndicatorImage
  • @Sebastian 你是对的,固定并忘记了这一点。那里可能有错字,自动完成功能不起作用。感谢您注意到这一点!
  • 出现时如何去掉所有后退按钮的标题?
  • Xcode/Swift 似乎不知道这些,因为它们不会在自动完成中显示,但它会编译并运行。
【解决方案2】:

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

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

这是苹果开发中心discussion Forums的原帖

要同时支持 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];
 }

【讨论】:

  • 谢谢,这行得通。但是UIImageRenderingModeAlwaysOriginal 在 iOS 6 中不起作用,我必须检查 iOS 版本。 UIImage *backImage = nil; if([[[UIDevice currentDevice] systemVersion] floatValue] &lt; 7.0){ backImage = [UIImage imageNamed:@"btn-back.png"]; }else{ backImage = [[UIImage imageNamed:@"btn-back.png"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]; }
  • 谢谢你,我只是编辑我的答案以支持这两个版本以帮助他们解决同样的问题。
  • 也是一件小事,你应该把 .png 放到你的图片中。这样 ios 就可以获取视网膜和非视网膜图像,或者设备特定的图像。
  • 我相信 respondsToSelector: 在这种情况下会更合适。 UIImage *temp = [UIImage imageNamed:@"btn-back.png"]; if ([temp respondsToSelector:@selector(imageWithRenderingMode:)]) { temp = [temp imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; }
  • UIBarButtonItemStyleBordered 在 iOS8.x 中已弃用。使用 UIBarButtonItemStylePlain。
【解决方案3】:

以下内容似乎对那些不想弄乱现有目标操作等的人更有意义。只需复制和粘贴即可。这也迫使 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;
}

arrow 是您的图片名称。

【讨论】:

    【解决方案4】:

    快速版本:

    var backBtn = UIImage(named: "return_menu")
    backBtn = backBtn?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
    
    self.navigationController!.navigationBar.backIndicatorImage = backBtn;
    self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtn;
    

    【讨论】:

    • 在我添加“imageWithRenderingMode”之前它无法正常工作...谢谢!
    【解决方案5】:

    试试这个方法:

    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"];
    

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

    【讨论】:

      【解决方案6】:

      // 给按钮添加图片

      UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom];
      [refreshButton setFrame:CGRectMake(0,0,30,30)];
      refreshButton.userInteractionEnabled = YES;
      [refreshButton setImage:[UIImage imageNamed:@"yourimage.jpg"] forState:UIControlStateNormal];
      
      // ASSIGNING THE BUTTON WITH IMAGE TO BACK BAR BUTTON
      
      UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease];
      self.navigationItem.leftBarButtonItem = refreshBarButton;
      

      【讨论】:

        猜你喜欢
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多