21

无论我尝试初始化 UIBarButtonItem 的任何图像,它都只显示图像大小的白色背景。即使我厌倦了界面生成器,结果也是一样的。当与其他对象一起使用时,所有这些图像都可以完美地工作。

我该如何解决这个问题?

4

3 回答 3

21

只有图像中的 alpha 值用于创建条形按钮图像。您提供的任何图像都会根据 alpha 值转换为带有白色阴影的图像。

因此,鉴于您的图像是完全白色的,很明显您没有任何透明度。

指导方针是这样说的:

  • 使用 PNG 格式。
  • 使用带有适当 alpha 的纯白色。
  • 不包括投影。
  • 使用抗锯齿。
  • 如果您决定添加一个斜角,请确保它是 90°(为了帮助您做到这一点,想象一个位于图标顶部的光源)。
  • 对于工具栏和导航栏图标,创建一个大小约为 20 x 20 像素的图标。
  • 对于标签栏图标,创建一个大小约为 30 x 30 像素的图标。

注意:您为工具栏、导航栏和标签栏提供的图标用作掩码来创建您在应用程序中看到的图标。没有必要创建全彩图标。

但是,您可以使用自定义视图来获取全彩图像,如此问题所示:

我可以有一个带有彩色图像的 UIBarButtonItem 吗?

不过这有点过头了,最好遵守指南并使用带有适当格式图像的普通按钮。

于 2010-05-25T09:55:06.653 回答
17

在 ios 7 以后,这将有所帮助

UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];
于 2015-05-12T05:57:59.823 回答
12

在 Swift 3 中,我发现以下工作 - 这里显示为多个 barButtonItem 的数组

  let barButtonItem1    = UIBarButtonItem( image: UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal) , style: .plain ,target: self, action: #selector(yourAction))
  let barButtonItem2    = UIBarButtonItem(image: UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)  , style: .plain, target: self, action: #selector(yourAction))

navigationItem.rightBarButtonItems = [barButtonItem1, barButtonItem2]

这在右侧显示 x2 barButtons。要向左显示,只需更改为

navigationItem.leftBarButtonItem = [barButtonItem1, barButtonItem2]

于 2016-11-11T09:34:18.023 回答