Alterar a cor de fundo da UINavigationBar

iOS 5 suporta aparência para alterar o design UINavigationBar. No entanto, não podemos usar UINavigationBar setBackgroundColor para alterar a cor. Precisamos criar imagem e uso com setBackgroundImage: forBarMetrics: . Então, estou usando UIBezierPath para desenhar a imagem de fundo em vez de usar a imagem PNG.

-(UIImage*)barBackgroundImage{

static UIImage *defaultImage = nil;
static dispatch_once_t onceToken;
dispatch_once
(&onceToken, ^{
UIGraphicsBeginImageContextWithOptions(CGSizeMake(20, 44), NO, 0.0f);


[[UIColor grayColor] setFill];
[[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, 44)] fill];


defaultImage
= UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

});

return defaultImage;


}

-(void)setupUI
{
[[UINavigationBar appearance] setBackgroundImage:[self barBackgroundImage] forBarMetrics:UIBarMetricsDefault];

}