更改导航项的背景颜色(条)

时间:2010-08-25 16:54:48

标签: iphone objective-c xcode

有一种简单的方法可以在视图顶部更改导航项的背景颜色吗?我有一个基于导航的应用程序,我只希望一个视图获得另一种背景颜色。我主要用IB创建了视图。我找到了以下解决方案(未经测试):

float r=10;
float g=55;
float b=130;
float a=0;

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 120, 30)];
[label setBackgroundColor:[UIColor colorWithRed:r/255.f
                                          green:g/255.f
                                           blue:b/255.f    
                                          alpha:a/255.f];];
[self.navigationController.navigationBar.topItem setTitleView:label];
[label release];

有没有像

这样的简单方法
[navigationController.navigationBar setBackgroundColor:blueColor]

或者我可以使用IB(但在每个视图中没有相同的颜色)吗?

非常感谢提前!

干杯

5 个答案:

答案 0 :(得分:18)

您可以使用:

[navigationController.navigationBar setTintColor:[UIColor redColor]; //Red as an example.

这会将导航栏的颜色和所有按钮的颜色设置为特定颜色,在本例中为红色。此属性也可以在Interface Builder中设置。

如果您想进一步自定义它,可以通过对图像进行子类化将UINavigationBar的背景设置为图像。像这样......

标题文件。

#import <UIKit/UIKit.h>

@interface UINavigationBar (CustomImage)

@end

实施文件。

#import "CustomNavigationBar.h"

@implementation UINavigationBar (CustomImage)

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx

{
    if([self isMemberOfClass: [UINavigationBar class]]){
        UIImage *image = [UIImage imageNamed:@"bar.png"];
        CGContextClip(ctx);
        CGContextTranslateCTM(ctx, 0, image.size.height);
        CGContextScaleCTM(ctx, 1.0, -1.0);
        CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
    }else{
        [super drawLayer:layer inContext:ctx];
    }

}

@end

然后在Interface Builder中,在Identity选项卡下将UINavigationBar的类设置为(在本例中)CustomNavigationBar

答案 1 :(得分:3)

UINavigationController 上的 Interface Builder 中试用。

enter image description here

答案 2 :(得分:2)

[[UINavigationBar appearance] setTintColor:[UIColor colorWithRed:107.0 / 256.0 green:145.0 / 256.0 blue:35.0 / 256.0 alpha:1.0]]; 将改变整个应用程序导航栏的颜色。

将它放在Appdelegate的didFinishLauncing方法中。

答案 3 :(得分:1)

您可以使用navigationController.navigationBar.tintColor;

答案 4 :(得分:1)

@jerry

RGB坐标

不支持色调颜色