2013-10-04 19 views
2

我正尝试使用以下代码为iOS7上的UIToolbar中的UIBarButtonItem设置自定义背景图像。工具栏中的UIBarButtonItems是否可以在iOS7中使用背景图像?

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强加自己的意志,而不是在这种情况下显示背景,或者是我错过的其他东西?

+0

我做在我的代码调用的确切顺序,我的自定义图像在iOS 7中显示得很好(我现在在我的代码中,只是再次检查它)。我也尝试过,并且没有导航栏的自定义图像,并且无论哪种方式都可以正常工作。 – HalR

+1

如果你绝望,你可以尝试将'customView'属性设置为包含图像的'UIImageView'。希望这会有所帮助;) – nemesis

+0

@HaIR这似乎适用于NavigationBar,但不适用于工具栏。 –

回答

2

至于我,我只能通过使用自定义视图来解决它。 例如,如果你有一些出路的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; 
+0

我自己没有使用IBOutlet(我的视图没有XIB),但是这对我来说是适用于iOS 7的;我曾尝试过许多其他解决方案都失败了。谢谢。 – Max

相关问题