0

在 iOS 6 中,您可以访问 Appearance API 中的一个新方法:

- (void)setBackgroundImage:(UIImage *)backgroundImage
              forState:(UIControlState)state
                 style:(UIBarButtonItemStyle)style
            barMetrics:(UIBarMetrics)barMetrics

因此,您可以为每个导航按钮样式设置不同的背景。问题是,它看起来不适用于这种UIBarButtonSystemItemAdd风格,但它适用于UIBarButtonItemStyleDone. 这是我的代码片段:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0f)
{
    // Works well
    [barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button-done.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]
                         forState:UIControlStateNormal
                            style:UIBarButtonItemStyleDone
                       barMetrics:UIBarMetricsDefault];

    // Not working
    [barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button-done.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]
                         forState:UIControlStateNormal
                            style:UIBarButtonSystemItemAdd
                       barMetrics:UIBarMetricsDefault];
}

有人知道为什么它不起作用吗?

4

1 回答 1

2

注意 UIBarButtonItem 的方法声明:

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state style:(UIBarButtonItemStyle)style barMetrics:(UIBarMetrics)barMetrics

问题是 UIBarButtonSystemItemAdd 不是有效的 UIBarButtonItemStyle。支持的样式有:

typedef enum {
    UIBarButtonItemStylePlain,
    UIBarButtonItemStyleBordered,
    UIBarButtonItemStyleDone,
} UIBarButtonItemStyle;

您将 UIBarButtonItemStyle 与 UIBarButtonSystemItem 混为一谈,它们并不完全相同,它只是忽略了您对其设置的值并恢复为默认类型。

于 2012-12-30T19:23:34.450 回答