iOS 7.1 GÜNCELLEME : Görünüşe göre, bu güncellemede UINavigationBar'daki alfa kanalını değiştirmek için geçici çözüm yok sayıldı. Şu anda, en iyi çözüm sadece 'onunla başa çıkmak' ve seçtiğiniz rengin yarı saydam bir etki yaratabileceğini ummak gibi görünüyor. Hala bunun üstesinden gelmenin yollarını arıyorum.
iOS 7.0.3 GÜNCELLEME : Oluşturduğumuz GitHub kütüphanesi , iOS 7.0.3 kullanılırken bu soruna geçici bir çözüm bulmak için güncellendi. Ne yazık ki, iOS 7.0.2 ve önceki sürümlerde ve iOS 7.0.3'te oluşturulan her iki rengi de destekleyen sihirli bir formül yoktur. Apple doygunluğu geliştirdi, ancak opaklık pahasına görünüyor (bulanık saydamlık opaklık seviyesine bağlı olduğundan). Birkaç kişi ile birlikte bunun için çok daha iyi bir düzeltme yaratmaya çalışıyorum.
Pek çok insanın iOS 7'nin yarı saydam bir UINavigationBar rengini desatura etme eğiliminde olduğu sorunuyla zaten karşılaştığına eminim.
Amacım, bu renk tonu rengiyle ancak yarı saydam bir UINavigationBar elde etmek:
Ancak, yarı saydamlıkla, bunu alıyorum. Arka plan görünümü beyaz, bu görünümü biraz daha hafif hale getireceğimizi anlıyorum:
Yarı saydamlığı korurken orijinal rengi elde etmenin herhangi bir yolu var mı? Facebook'un barının burada gösterildiği gibi zengin, mavi rengi olmasını sağlayabildiğini fark ettim:
.. yani bir şekilde olması gerektiğini biliyorum. Arka plan görünümleri burada bir fark yaratır, ancak içeriklerinin çoğu da gri / beyazdır. Görünüşe göre, hangi bar renk tonunu koyarsanız koyun, yarı saydamlık altında canlı renkler elde edemezsiniz.
Çözüm ile güncellendi.
İşte sonunda bulduğum çözüm. Çektiğim aprato özel kapsayan ardından 'ın çözüm ve UINavigationBar
bir içinde UINavigationController
alt sınıf. Örnek bir uygulama ile birlikte, bu uygulama aşağıda listelenen bir havuz oluşturduk .
////////////////////////////
// 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'de yarı saydamlığa maruz kaldığında mümkün olan en iyi parlaklığını düzeltmek için bir çözümdür .
UINAvigationBar
opak değil mi?