1、nav bar的 translucent 设为YES。这个值默认就是YES的。
如果translucent为NO,则导航栏一定是不透明的。
[UINavigationBar appearance].translucent = YES;
2、用半透明的图设置BackgroundImage,设置了BackgroundImage后barTintColor就无效了。
注意:这个图如果不够大,则会自动扩展到整个导航栏。
UIImage* bg = ……;
[[UINavigationBar appearance] setBackgroundImage:bg forBarMetrics:UIBarMetricsDefault];下面是一个完整的例子:
[UINavigationBar appearance].translucent = YES;
UIImage* bg = JDUtils.imageWithColor(COLORWithAlpha(0xea4940, 0.8));
[[UINavigationBar appearance] setBackgroundImage:bg forBarMetrics:UIBarMetricsDefault];
//由指定颜色生成一个像素大小的UIImage。
static UIImage* imageWithColor(UIColor * color)
{
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//由16进制数成生UIColor的宏。
#define COLORWithAlpha(rgbValue,alphaValue) \
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 \
alpha:alphaValue]