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