iOS 7.1 UPDATE : Sepertinya solusi untuk memodifikasi saluran alpha di UINavigationBar telah diabaikan dalam pembaruan ini. Saat ini, solusi terbaik tampaknya hanya dengan 'menghadapinya' dan berharap warna apa pun yang Anda pilih dapat memberikan efek tembus cahaya. Saya masih mencari cara untuk mengatasi ini.
iOS 7.0.3 PEMBARUAN : Perpustakaan GitHub yang kami buat telah diperbarui untuk sedikit mengatasi masalah ini ketika menggunakan iOS 7.0.3. Sayangnya, tidak ada formula ajaib untuk mendukung kedua warna yang dibuat di iOS 7.0.2 dan sebelumnya dan iOS 7.0.3. Sepertinya Apple meningkatkan saturasi, tetapi dengan biaya opacity (karena kekaburan kabur tergantung pada level opacity). Saya, bersama dengan beberapa orang lain, sedang berupaya menciptakan perbaikan yang jauh lebih baik untuk ini.
Saya yakin banyak orang telah menemukan masalah di mana iOS 7 cenderung menghilangkan sifat warna UINavigationBar yang tembus cahaya.
Tujuan saya adalah untuk mencapai UINavigationBar dengan warna warna ini, tetapi tembus:
Namun, dengan transparansi, saya mendapatkan ini. Tampilan latar belakang berwarna putih, yang saya mengerti akan membuat tampilan ini sedikit lebih ringan:
Apakah ada cara untuk mencapai warna asli sambil tetap tembus cahaya? Saya perhatikan Facebook telah bisa menjadikan bar mereka kaya, warna biru, seperti yang ditampilkan di sini:
..so saya tahu harus ada cara. Tampilan latar belakang jelas membuat perbedaan di sini, tetapi sebagian besar konten mereka juga abu-abu / putih. Tampaknya terlepas dari warna bar apa pun yang Anda masukkan, Anda tidak dapat mendapatkan warna yang jelas di bawah transparansi.
Diperbarui dengan solusi.
Inilah solusi yang akhirnya saya dapatkan. Saya mengambil solusi aprato dan kemudian memasukkan custom ke UINavigationBar
dalam UINavigationController
subclass. Saya telah membuat repositori yang penerapannya tercantum di bawah ini, bersama dengan contoh aplikasi .
////////////////////////////
// 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
sebaik mungkin ketika terkena transparansi di iOS 7.
UINAvigationBar
buram?