通过外观为 UIBarButtonItem 设置背景图像不适用于其他 UIControlStates

Posted

技术标签:

【中文标题】通过外观为 UIBarButtonItem 设置背景图像不适用于其他 UIControlStates【英文标题】:setBackgroundImage for UIBarButtonItem via appearance not working for other UIControlStates 【发布时间】:2012-09-06 13:46:54 【问题描述】:

我正在尝试使用外观方法 (>ios 5.0) 自定义 UIBarButtonItem。它适用于 UIControlStateNormal,但不适用于突出显示或禁用。查看图片

这是我用来设置这些的代码:

        // now configure the UIBarButtonItems
    UIImage *buttonBGInactive = [[UIImage imageNamed:@"button-navbar-30-inactive.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];
    UIImage *buttonBGActive = [[UIImage imageNamed:@"button-navbar-30-pressed.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)];

    [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage: buttonBGInactive forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage: buttonBGActive forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

有什么想法吗?图片本身是 30x30px,我不需要横向模式。

【问题讨论】:

【参考方案1】:

我找到了问题的解决方案。我的图像是 30x30px,我将可调整大小的端盖设置为

UIEdgeInsetsMake(0, 15, 0, 15)

通过将这些 15 设置为 14,问题就消失了。所以最好不要让端盖正好是图像宽度的一半。

【讨论】:

以上是关于通过外观为 UIBarButtonItem 设置背景图像不适用于其他 UIControlStates的主要内容,如果未能解决你的问题,请参考以下文章

UIBarButtonItem 外观我需要一个例外

影响工具栏的 NavigationControl 的 UIBarButtonItem 外观

如何赋予 UIButton UIBarButtonItem 的外观

UIBarButtonItem 外观 setTitleTextAttributes 不影响 UIControlStateDisabled 状态

设备上的导航 UIBarButtonItem 外观不同

通过操作将 UIBarButtonItem 设置为 backBarButtonItem,不起作用