工具栏中的 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 中的 UIButton 执行单击的处理程序
如果在工具栏中点击,UIBarButtonItem 不会突出显示?
WEPopoverController presentPopoverFromBarButtonItem 导致指定的 UIBarButtonItem 消失