UIBarButtonItem的setBackgroundImage通过外观不适用于其他UIControlStates

时间:2012-09-06 13:46:55

标签: ios ios5 customization uibarbuttonitem uiappearance

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

Ok in the default state, notice the disabled state at right

highlighted state also not working

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

        // 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];

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

1 个答案:

答案 0 :(得分:2)

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

UIEdgeInsetsMake(0,15,0,15)

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