【问题标题】:UIBarButtonItem image stays blue and not the original color of the image?UIBarButtonItem 图像保持蓝色而不是图像的原始颜色?
【发布时间】:2014-11-10 23:02:20
【问题描述】:

为什么图标 info.png 保持蓝色并且不带有该图像的原始颜色?我正在使用以下代码:

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"info.png"]
                                                                             style:UIBarButtonItemStylePlain
                                                                            target:self
                                                                            action:@selector(info:)];

【问题讨论】:

  • 您可能将视图控制器上的 Tint 颜色设置为默认蓝色。
  • 就是这样,我根本没有设置 tintcolor,Appdelegate.m 上也没有
  • 开箱即用 - 您必须取消设置。

标签: objective-c xcode uibarbuttonitem


【解决方案1】:

默认情况下,UINavigationBar 的条形按钮项中的图像使用模板模式呈现。您可以将其设置为原始。

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"info.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
                                                                         style:UIBarButtonItemStylePlain
                                                                        target:self
                                                                        action:@selector(info:)];

【讨论】:

    【解决方案2】:

    斯威夫特 3:

    let image : UIImage? = UIImage.init(named: "heart.png")!.withRenderingMode(.alwaysOriginal)
    

    【讨论】:

      【解决方案3】:

      我知道现在回答这个问题为时已晚,但我发现有一种非常简单的方法可以解决这个问题,而不是对代码进行一些更改

      使用 Xcode 转到 Assets --Select Image --- 选中 Render as 并选择 Original image 而不是 default property 。

      【讨论】:

      • 完美!这是最简单的解决方案
      【解决方案4】:

      您也可以从资产中获取。转到 Assets.xcassets >> 选择用作 barbutton 项目图像的图像。点击右侧面板中的属性检查器。选择渲染为原始图像。它将提前默认。您现在将看到彩色图像。

      【讨论】:

      • 这不适用于 iOS 11 和 Xcode 9.4.1。我在资产目录中配置了图像以呈现为原始图像,但它们仍然是 UIToolbarView 上的彩色剪影。
      【解决方案5】:

      斯威夫特 4:

      let image = UIImage(named: "imageName")?.withRenderingMode(.alwaysOriginal)
      navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(leftBarButtonPressed))
      

      【讨论】:

        【解决方案6】:

        对于 Swift 2.1+,它看起来像这样:

        let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
        

        或者干脆

        let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(.AlwaysOriginal)
        

        【讨论】:

        • 还有其他方法吗?比如不需要设置UIImageRenderingModeAlwaysOriginal 的特殊类型图片?
        • not afaik - 它是条形按钮类的限制
        【解决方案7】:

        因为您应用中 barButtonItems 的颜色与应用窗口上的 tintColor 属性有关。

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
            self.window.tintColor = [UIColor redColor];
            return YES;
        }
        

        【讨论】:

        • 这将使颜色变为红色,如果我将其设置为 nil,它将再次返回蓝色。
        • 尝试像这样实例化图像:UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        【解决方案8】:

        好的,知道了...我先将图像设置为原始状态。

        UIImage *image = [[UIImage imageNamed:@"info.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:image
                                                                                     style:UIBarButtonItemStylePlain
                                                                                    target:self
                                                                                    action:@selector(info:)];
        

        【讨论】:

        • 这在 Apple 的文档“工具栏”中有明确的解释:条形按钮项图标 工具栏中的任何条形按钮都可以有自定义图像而不是文本。您可以在初始化期间将此图像提供给您的条形按钮项。请注意,条形按钮图像将自动呈现为工具栏中的模板图像,除非您将其呈现模式显式设置为 UIImageRenderingModeAlwaysOriginal。有关详细信息,请参阅模板图像。
        【解决方案9】:

        从情节提要更改条形按钮项目的色调颜色。或者从情节提要中的图像中着色。

        颜色应该是您预期的十六进制或RGB颜色。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-07
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多