iOS 7.1更新:在此更新中,似乎已忽略了用于修改UINavigationBar中的Alpha通道的解决方法。目前,最好的解决方案似乎是“处理”,并希望您选择的任何颜色都能呈现半透明的效果。我仍在研究解决此问题的方法。
iOS 7.0.3更新:使用iOS 7.0.3时,我们创建的GitHub库已更新为可以稍微解决此问题。不幸的是,没有一种魔术公式可以支持在iOS 7.0.2和更低版本以及iOS 7.0.3中创建的两种颜色。好像苹果公司提高了饱和度,但是却以不透明度为代价(因为模糊的半透明性取决于不透明度)。我和其他一些人正在努力为此创建更好的解决方案。
我敢肯定,很多人已经遇到了iOS 7倾向于使半透明的UINavigationBar的颜色不饱和的问题。
我的目标是使用这种色调但半透明的颜色实现UINavigationBar:
但是,半透明,我明白了。背景视图为白色,据我所知,它将使该视图更浅:
有什么方法可以在保持半透明的同时获得原始颜色?我注意到Facebook能够使其条形成为其丰富的蓝色,如下所示:
..所以我知道一定有办法。背景视图显然在这里有所不同,但是它们的大多数内容也是灰色/白色。看来,无论您使用什么颜色,您都无法在半透明状态下获得鲜艳的色彩。
更新了解决方案。
这是我最终想到的解决方案。我采用了aprato的解决方案,然后将该自定义包含UINavigationBar
在一个UINavigationController
子类中。我创建了一个存储库,该存储库在下面列出了此实现以及一个示例应用程序。
////////////////////////////
// CRNavigationBar.m
////////////////////////////
#import "CRNavigationBar.h"
@interface CRNavigationBar ()
@property (nonatomic, strong) CALayer *colorLayer;
@end
@implementation CRNavigationBar
static CGFloat const kDefaultColorLayerOpacity = 0.5f;
static CGFloat const kSpaceToCoverStatusBars = 20.0f;
- (void)setBarTintColor:(UIColor *)barTintColor {
[super setBarTintColor:barTintColor];
if (self.colorLayer == nil) {
self.colorLayer = [CALayer layer];
self.colorLayer.opacity = kDefaultColorLayerOpacity;
[self.layer addSublayer:self.colorLayer];
}
self.colorLayer.backgroundColor = barTintColor.CGColor;
}
- (void)layoutSubviews {
[super layoutSubviews];
if (self.colorLayer != nil) {
self.colorLayer.frame = CGRectMake(0, 0 - kSpaceToCoverStatusBars, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds) + kSpaceToCoverStatusBars);
[self.layer insertSublayer:self.colorLayer atIndex:1];
}
}
@end
////////////////////////////
// CRNavigationController.m
////////////////////////////
#import "CRNavigationController.h"
#import "CRNavigationBar.h"
@interface CRNavigationController ()
@end
@implementation CRNavigationController
- (id)init {
self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
if(self) {
// Custom initialization here, if needed.
}
return self;
}
- (id)initWithRootViewController:(UIViewController *)rootViewController {
self = [super initWithNavigationBarClass:[CRNavigationBar class] toolbarClass:nil];
if(self) {
self.viewControllers = @[rootViewController];
}
return self;
}
@end
UINavigationBar
时在IOS 7.暴露于半透明尽可能最佳
UINAvigationBar
不透明吗?