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.