1

我在 UINavigationBar 上使用白色背景和 darkGrayColor 文本

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"uinavigationcontrollerbackground"] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font,UITextAttributeFont ,[UIColor darkGrayColor], UITextAttributeTextColor,  [UIColor whiteColor], UITextAttributeTextShadowColor, nil]];

看起来不错,但是我在整个应用程序中都定义了这样的按钮:

self.searchButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchProducts)];

我取消了默认的 blakc 背景外观,如下所示:

[[UIBarButtonItem appearance] setBackgroundImage:[UIImage imageNamed:@"uibarbuttonbackground"]  forState:UIControlStateNormal
                                          barMetrics:UIBarMetricsDefault];

这只是一个白色方块。

现在我的图标仍然是带有浅灰色阴影的白色,无论如何要更改这些默认图标?

4

2 回答 2

0

一旦我试图改变背景UIBarButtonSystemItemCamera但没有任何效果。我猜这些默认的系统按钮类型 ( UIBarButtonSystemItem) 已经带有背景图像,所以改变它是行不通的。

我建议您创建一个自定义视图并使用它初始化您的栏按钮。不是一个完美的代码,但我希望它有所帮助。

 UIImage *image = [UIImage imageNamed:@"icon.png"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:self action:@selector(takePicture:)    forControlEvents:UIControlEventTouchUpInside];

    UIView *v=[[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, image.size.width, image.size.height) ];
    [v addSubview:button];


    UIBarButtonItem *barItem = [[[UIBarButtonItem alloc] initWithCustomView:v] autorelease];
于 2013-11-12T18:50:52.577 回答
0

我使用了此处找到的类别解决方案,效果很好:

UIBarButtonItem 具有自定义图像且无边框

我的工作比我希望的要多,但这是一个很好的干净解决方案。

于 2013-11-13T15:50:46.977 回答