iOS 7.1 UPDATE : ดูเหมือนว่าวิธีแก้ไขปัญหาสำหรับการปรับเปลี่ยนช่องอัลฟาใน UINavigationBar นั้นถูกข้ามไปในการอัพเดทนี้ ตอนนี้ทางออกที่ดีที่สุดดูเหมือนจะเป็นเพียง 'จัดการกับมัน' และหวังว่าสีที่คุณเลือกจะทำให้เอฟเฟกต์โปร่งแสง ฉันยังคงมองหาวิธีในการแก้ไขปัญหานี้
iOS 7.0.3 UPDATE : ไลบรารี GitHub ที่เราสร้างได้รับการอัปเดตเพื่อแก้ไขปัญหานี้เล็กน้อยเมื่อใช้ iOS 7.0.3 น่าเสียดายที่ไม่มีสูตรเวทย์มนตร์ที่จะรองรับทั้งสีที่สร้างใน 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
ไม่ทึบแสงหรือไม่