工具栏中的 UIBarButtonItem 可以在 iOS 7 中具有背景图像吗?

Posted

技术标签:

【中文标题】工具栏中的 UIBarButtonItem 可以在 iOS 7 中具有背景图像吗?【英文标题】:Can UIBarButtonItems in a Toolbar have a Background Image in iOS7? 【发布时间】:2013-10-04 19:13:59 【问题描述】:

我正在尝试使用以下代码在 ios7 上的 UIToolbar 中为 UIBarButtonItem 设置自定义背景图像。

    NSString *imageName = selected ? @"background_view_baritem_selected" : @"background_view_baritem_normal";
UIImage *backgroundImage = [UIImage imageNamed:imageName];
UIImage *resizableBackgroundImage = [backgroundImage resizableImageWithCapInsets:UIEdgeInsetsMake(6, 6, 6, 6)];
[self setBackgroundImage:resizableBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

在调试器中,使用 QuickLook,我可以验证 resizableBackgroundImage 是否符合我的预期(选中时为蓝色圆角矩形,通常为灰色圆角矩形)。但是,不会出现背景图像。此代码在 iOS6 上按预期工作(显示背景图像)。在这种情况下,iOS7 是强加其意志而不显示背景,还是我缺少的其他东西?

【问题讨论】:

我正在我的代码中执行确切的调用顺序,我的自定义图像在 iOS 7 中显示得很好(我现在在我的代码中,只是仔细检查了它)。我还尝试了使用和不使用导航栏的自定义图像,无论哪种方式都可以正常工作。 如果你绝望了,你可以尝试将customView 属性设置为包含图像的UIImageView。希望这会有所帮助;) @HaIR 这似乎适用于导航栏,但不适用于工具栏。 【参考方案1】:

就我而言,我只能通过使用自定义视图来解决它。 例如,如果你有一些 UIBarButtonItem 的出口

@property (nonatomic, weak) IBOutlet  UIBarButtonItem *item;

.....在您的代码中,您可以执行以下操作:

UIImage *configImage = /* initialize necessary image */;
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0,0, item.width, 32)];
[btn setBackgroundImage:configImage forState:UIControlStateNormal];
[btn setTitle:item.title forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize:14];
[btn addTarget:item.target action:item.action forControlEvents:UIControlEventTouchUpInside];

item.customView = btn;

【讨论】:

我自己没有使用 IBOutlet(我认为没有 XIB),但这适用于我的 iOS 7;我尝试了许多其他解决方案,但都失败了。谢谢。

以上是关于工具栏中的 UIBarButtonItem 可以在 iOS 7 中具有背景图像吗?的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 在视图更改之前不会被禁用

在 UIBarButtonItem 中添加边框

未为 UIBarButtonItem 中的 UIButton 执行单击的处理程序

如果在工具栏中点击,UIBarButtonItem 不会突出显示?

自定义 UIBarButtonItem 突出显示问题

WEPopoverController presentPopoverFromBarButtonItem 导致指定的 UIBarButtonItem 消失