CẬP NHẬT iOS 7.1 : Có vẻ như cách giải quyết để sửa đổi kênh alpha trong UINavlationBar đã bị bỏ qua trong bản cập nhật này. Ngay bây giờ, giải pháp tốt nhất dường như chỉ là 'đối phó với nó' và hy vọng rằng bất kỳ màu nào bạn chọn đều có thể tạo ra hiệu ứng mờ. Tôi vẫn đang tìm cách khắc phục điều này.
CẬP NHẬT iOS 7.0.3 : Thư viện GitHub mà chúng tôi đã tạo đã được cập nhật để khắc phục một chút vấn đề này khi sử dụng iOS 7.0.3. Thật không may, không có công thức kỳ diệu nào để hỗ trợ cả hai màu được tạo trong iOS 7.0.2 trở về trước và iOS 7.0.3. Có vẻ như Apple đã cải thiện độ bão hòa, nhưng với chi phí cho độ mờ (vì độ mờ mờ phụ thuộc vào mức độ mờ). Tôi, cùng với một vài người khác, đang làm việc để tạo ra một bản sửa lỗi tốt hơn cho việc này.
Tôi chắc chắn rằng nhiều người đã gặp phải vấn đề trong đó iOS 7 có xu hướng làm mất màu của UINavestionBar mờ.
Mục tiêu của tôi là đạt được một UINavestionBar với màu sắc này, nhưng mờ:
Tuy nhiên, với độ trong mờ, tôi đang nhận được điều này. Chế độ xem nền là màu trắng, mà tôi hiểu sẽ làm cho chế độ xem này nhẹ hơn một chút:
Có cách nào để đạt được màu gốc trong khi vẫn có độ trong mờ? Tôi đã nhận thấy Facebook đã có thể làm cho thanh của họ có màu xanh lam, phong phú như được hiển thị ở đây:
.. vì vậy tôi biết phải có một số cách. Chế độ xem nền rõ ràng tạo ra sự khác biệt ở đây, nhưng hầu hết nội dung của chúng cũng có màu xám / trắng. Dường như bất kể màu sắc thanh màu nào bạn đặt vào, bạn không thể có được màu sắc sống động dưới độ trong mờ.
Cập nhật với giải pháp.
Đây là giải pháp mà tôi đã đưa ra. Tôi lấy giải pháp của aprato và sau đó bao gồm các tùy chỉnh UINavigationBar
trong một UINavigationController
lớp con. Tôi đã tạo một kho lưu trữ có triển khai này được liệt kê bên dưới, cùng với một ứng dụng ví dụ .
////////////////////////////
// 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
tốt nhất có thể khi tiếp xúc với độ mờ trong iOS 7.
UINAvigationBar
không mờ?