iOS 7 UIButtonBarItem 图像不着色

Posted

技术标签:

【中文标题】iOS 7 UIButtonBarItem 图像不着色【英文标题】:iOS 7 UIButtonBarItem image does not tint 【发布时间】:2013-11-07 18:10:51 【问题描述】:

在我的导航栏上,我有几个带有自定义图标的 rightBarButtonItem(图标图像是白色的,与 ios 6 的基本配色方案配合得很好)。

在 iOS 7 下,使用 initWithTitle(参见代码 sn-p 1)加载图像会将图标中的“白色”颜色替换为适当的全局色调(在本例中为深蓝色的特定颜色)

代码片段 1

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

但是,我需要使用 initWithCustomView 来克服导致图标移出视图的奇怪行为变化。基本思想是专门设置图标的大小。 initWithCustomView 解决了大小问题,但不显示具有全局色调的按钮图像,它们以图像的颜色(白色)显示。代码片段 2 显示了我如何使用 initWithCustomView 创建按钮。

代码片段 2

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

所有这些代码当然都在 (void)viewDidLoad 中。我试过这样的事情:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

或 [barButtonAppearance setTintColor:[UIColor blackColor]]; // 不工作

并且它们不会覆盖图像的白色。就好像自定义视图的创建发生在视图查看全局色调颜色之后?

如何确保按钮图标采用全局色调?

谢谢!

【问题讨论】:

【参考方案1】:

只是想将其放入根注释中,以便为“答案”复选标记提供更好的上下文,并提供更好的格式。

我能解决这个问题!您可以告诉图像始终呈现为模板,这将强制它采用全局色调颜色。

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

如果不设置,默认为“UIImageRenderingModeAutomatic”,这意味着它将根据上下文呈现为模板或原始图像。

【讨论】:

【参考方案2】:

您要么必须解决您在使用第一个代码 sn-p 时遇到的问题,要么必须创建一个 UIButton 子类,将其图像用作掩码以在 drawRect: 中显示色调颜色.

我推荐第一种方法。

【讨论】:

谢谢,但是第二个代码 sn-p 实际上是第一个问题的解决方法,至少这是我认为我需要做的。这两个按钮最初渲染得很好,但是当我转到另一个视图然后返回时,它们似乎会换行到下一行。这是一个更难描述的问题,我认为只为图标设置一个固定宽度会更容易,它确实解决了图标移动的问题,但让我陷入了色调困境。 我能弄明白这个!您可以告诉图像始终呈现为模板,这将强制它采用全局色调颜色。 UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"]; iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];如果不设置,默认为“UIImageRenderingModeAutomatic”,这意味着它将根据上下文呈现为模板或原始图像。

以上是关于iOS 7 UIButtonBarItem 图像不着色的主要内容,如果未能解决你的问题,请参考以下文章

UIButtonBarItem 中的 UISegmentedControl

图像捕获不工作 iOS 7

在 iOS 7 上纵向裁剪图像会导致方向不正确

iOS 7:自定义后退指示图像位置

在 iOS 7 中设置导航栏图像

UITabBar 未在 ios 7 中显示所选项目图像