iOS 7.1 UPDATE : Die Problemumgehung zum Ändern des Alphakanals in der UINavigationBar wurde in diesem Update anscheinend ignoriert. Im Moment scheint die beste Lösung darin zu bestehen, einfach damit umzugehen und zu hoffen, dass jede Farbe, die Sie wählen, einen durchscheinenden Effekt erzielen kann. Ich suche immer noch nach Möglichkeiten, dies zu umgehen.
iOS 7.0.3 UPDATE : Die von uns erstellte GitHub-Bibliothek wurde aktualisiert, um dieses Problem bei Verwendung von iOS 7.0.3 geringfügig zu umgehen. Leider gibt es keine Zauberformel, die beide in iOS 7.0.2 und früheren Versionen und iOS 7.0.3 erstellten Farben unterstützt. Scheint, als hätte Apple die Sättigung verbessert, jedoch auf Kosten der Opazität (da die unscharfe Transluzenz von der Opazität abhängt). Ich arbeite zusammen mit einigen anderen daran, eine viel bessere Lösung dafür zu finden.
Ich bin sicher, dass viele Leute bereits auf das Problem gestoßen sind, bei dem iOS 7 dazu neigt, die Farbe einer durchscheinenden UINavigationBar zu entsättigen.
Mein Ziel ist es, eine UINavigationBar mit dieser Farbtonfarbe zu erzielen, die jedoch durchscheinend ist:
Mit der Transluzenz bekomme ich das jedoch. Die Hintergrundansicht ist weiß, was meiner Ansicht nach diese Ansicht etwas heller macht:
Gibt es eine Möglichkeit, die ursprüngliche Farbe zu erhalten, während die Transluzenz erhalten bleibt? Ich habe festgestellt, dass Facebook in der Lage war, die Leiste in ihrer satten blauen Farbe anzuzeigen, wie hier angezeigt:
..so ich weiß, dass es einen Weg geben muss. Hintergrundansichten machen hier natürlich einen Unterschied, aber der größte Teil ihres Inhalts ist auch grau / weiß. Es scheint, dass Sie unabhängig von der eingebrachten Balkentönungsfarbe keine lebendigen Farben unter Transluzenz erhalten können.
Mit Lösung aktualisiert.
Hier ist die Lösung, die ich gefunden habe. Ich nahm die Lösung von Aprato und fasste den Brauch dann UINavigationBar
in einer UINavigationController
Unterklasse zusammen. Ich habe ein Repository erstellt, in dem diese Implementierung zusammen mit einer Beispiel-App aufgeführt ist .
////////////////////////////
// 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
so gut wie möglich zu korrigieren , wenn sie in iOS 7 der Transluzenz ausgesetzt sind.
UINAvigationBar
undurchsichtig?