【问题标题】:Can UIBarButtonItems in a Toolbar have a Background Image in iOS7?工具栏中的 UIBarButtonItem 可以在 iOS 7 中具有背景图像吗?
【发布时间】: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 这似乎适用于导航栏,但不适用于工具栏。

标签: ios ios7 uibarbuttonitem uitoolbar


【解决方案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;我尝试了许多其他解决方案,但都失败了。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2014-10-18
相关资源
最近更新 更多