2015-10-29 22 views
8

Vì vậy, tôi sử dụng để sử dụng:làm thế nào để động thay đổi trạng thái phong cách thanh từ iOS 9

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent 
              animated:YES]; 

animate sự thay đổi thanh trạng thái phong cách, từ đậm với ánh sáng và ngược lại

Tuy nhiên phương pháp này không được chấp kể từ khi iOS 9.

tôi thay đổi để sử dụng preferredStatusBarStyle sau câu trả lời @ serenn trong preferredStatusBarStyle isn't called

Nó thực sự có thể thay đổi phong cách thanh trạng thái trong thời trang cũ, nhưng không có hình động.

Các tài liệu cho biết:

Nếu giá trị trả về từ phương pháp này thay đổi, gọi phương thức setNeedsStatusBarAppearanceUpdate.

Tuy nhiên tôi không biết nên gọi nó ở đâu, tôi đã thử đặt trong viewWillAppear, nhưng không may mắn.

preferredStatusBarUpdateAnimation vẫn là mặc định: UIStatusBarAnimationFade

Vì vậy, tôi bối rối. Tìm kiếm câu trả lời cho cách tạo hoạt ảnh như phương pháp không dùng nữa. Cảm ơn trước!

Trả lời

11

OK Tôi đã dành hai giờ tìm kiếm và cố gắng, figured it out:

Trước tiên, bạn phải chắc chắn điều khiển xem con bạn có thể kiểm soát tình trạng phong cách thanh trong điều khiển chuyển hướng bằng cách ghi đè preferredStatusBarStyle như câu trả lời @ serenn của trong preferredStatusBarStyle isn't called

để có hình ảnh động, tôi phải trả lại hai phong cách khác nhau trước và sau khi điều khiển xem xuất hiện như dưới đây:

-(UIStatusBarStyle)preferredStatusBarStyle { 
    if (!viewAppeared) 
     return UIStatusBarStyleDefault; 
    else 
     return UIStatusBarStyleLightContent; // your own style 
} 

viewAppeared là một BOOL để chỉ ra nếu viewWillAppear được gọi là:

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    viewAppeared = YES; 

    [UIView animateWithDuration:0.8 animations:^{ 
     [self setNeedsStatusBarAppearanceUpdate]; 
    }]; 
} 

-(void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    viewAppeared = NO; 
} 

Vì vậy, khi bộ điều khiển xem không xuất hiện, tình trạng thanh phong cách là UIStatusBarStyleDefault và sẽ được thay đổi để UIStatusBarStyleLightContent trong viewWillAppear.

Sau đó gọi setNeedsStatusBarAppearanceUpdate để cập nhật thay đổi như dưới đây, được lưu ý animateWithDuration là phải có hoạt ảnh.

[UIView animateWithDuration:0.8 animations:^{ 
    [self setNeedsStatusBarAppearanceUpdate]; 
}]; 

tôi sử dụng để tìm ra bạn không cần phải gọi preferredStatusBarStyle đầu tiên như dưới đây, setNeedsStatusBarAppearanceUpdate sẽ gọi preferredStatusBarStyle một lần nữa:

[UIView animateWithDuration:0.8 animations:^{ 
    [self preferredStatusBarStyle]; 
    [self setNeedsStatusBarAppearanceUpdate]; 
}]; 

Mặc dù giải pháp này giải quyết vấn đề, tôi không chọn sử dụng nó ngay bây giờ. Tôi có thể có cùng một kết quả với chỉ một dòng mã nhưng nó bây giờ là cách quá nhiều mã tôi phải viết. API không dùng nữa thậm chí không kích hoạt cảnh báo ngay bây giờ, vì vậy cho đến khi Apple tiếp tục thúc đẩy tôi thay đổi, tôi sẽ không sử dụng cách này. Khi thời gian đến, tôi hy vọng có một giải pháp tốt sau đó.

Tôi rất bối rối vì sao Apple không dùng mã một dòng ([UIApplication sharedApplication] setStatusBarStyle]...) có thể thực hiện tất cả các thủ thuật, nhưng sử dụng phức tạp hơn để đạt được kết quả tương tự. Ngay cả khi bạn muốn kiểm soát chi tiết hơn, Apple cũng không phải từ chối quyền kiểm soát cũ.

Nhưng có lẽ tôi đã không tìm thấy sản phẩm tốt nhất ngay bây giờ. Hy vọng ai đó có thể khai sáng cho tôi.

Các vấn đề liên quan