Tôi đang cố tạo giao diện tương tự như ứng dụng Ảnh nơi thanh trạng thái & thanh điều hướng mờ dần vào/ra nhưng tôi đang gặp sự cố. Nếu tôi nhấn để ẩn giao diện, sau đó xoay thiết bị, sau đó nhấn để sao lưu thiết bị, sau đó thanh điều hướng được đặt lại vị trí bên dưới thanh trạng thái (xem ảnh). Nếu sau đó tôi xoay thiết bị, thanh điều hướng sẽ trở lại vị trí thích hợp của nó. Làm thế nào tôi có thể sửa lỗi này?UINavigationBar Xuất hiện dưới StatusBar
Trả lời
Điều này có thể đến trễ một chút nhưng tôi vừa có cùng một vấn đề. Tôi đang desiging một người đọc xem toàn màn hình với thanh trạng thái trong suốt, thanh điều hướng và thanh công cụ mà bạn có thể mờ dần vào và ra bằng cách khai thác ở trung tâm của màn hình. Cách tôi đã quản lý để sửa chữa nó thực sự là đơn giản, về cơ bản cốt lõi của vấn đề nếu điều này: Khi bạn xoay chế độ xem và NavigationController tính toán lại vị trí mới của nó, nó nghĩ rằng nó phải ở trên cùng của cửa sổ vì thanh trạng thái bị ẩn. Khi bạn hiển thị cả thanh trạng thái và thanh điều hướng sau đó, chúng sẽ chồng lên nhau.
Cách khắc phục điều này thực sự dễ dàng, chỉ cần giữ BOOL để nhớ xem lớp phủ của bạn có được hiển thị hay ẩn và triển khai cả willRotateToInterfaceOrientation và willAnimateRotationToInterfaceOrientation trong ViewController của bạn.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
Bằng cách hiển thị nhanh và ẩn thanh trạng thái theo hai phương pháp này, StatusBar được hiển thị tại thời điểm chính xác NavigationBar tính toán lại vị trí của nó. Tôi không biết nếu đây là triển khai tốt nhất để khắc phục vấn đề này, nhưng cho đến nay phương pháp này hoạt động và không tạo ra bất kỳ nhấp nháy trên màn hình và rất trơn tru.
Tôi hy vọng người khác có vấn đề của tôi có thể vấp ngã khi đăng bài này và tìm giải pháp dễ dàng này cho vấn đề này.
Thật không may, thật khó chịu. Khi ẩn thanh trạng thái, về cơ bản nó mở ra không gian đó cho uiviewcontrollers để sử dụng. Với autoresizing trên, nó về cơ bản sẽ di chuyển vào không gian đó bởi vì nó không có ý tưởng rằng bạn sẽ muốn sử dụng không gian đó một lần nữa. Đặt cược tốt nhất của bạn là thay đổi kích thước chế độ xem theo cách thủ công để khi thanh trạng thái xuất hiện trở lại, bạn cũng thu hẹp chế độ xem xuống để nó được đặt chính xác bên dưới thanh trạng thái.
Giải pháp khác (đơn giản hơn) là đặt lại khung nhìn của cấp cao nhất khi hiển thị lại thanh trạng thái; ví dụ.
- (void)exitFullScreenMode
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
// work-around for navigation bar appearing under status bar - must be called before -setNavigationBarHidden:
self.view.window.rootViewController.view.frame = [UIScreen mainScreen].applicationFrame;
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
if (self.navigationController.navigationBarHidden)
{
/******* Cancel Fullscreen ****/
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:NO animated:YES];
[self.navigationController setToolbarHidden:NO animated:YES];
}
else {
/******* Enable Fullscreen ****/
if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
[self.navigationController setNavigationBarHidden:YES animated:YES];
[self.navigationController setToolbarHidden:YES animated:YES];
}
Tôi đã có vấn đề thiết lập alpha = 0 cho Navigationbar để ẩn nó. Vì vậy, rõ ràng, sau khi gọi:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
Bạn có thể loại bỏ các Navigationbar bằng cách gọi ẩn và tái chèn nó vào trong xem và sau đó thiết lập các alpha = 0:
//hiding and showing to redraw navigationBar over the status bar
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
self.navigationController.navigationBar.alpha = 0;
này sẽ giải quyết thêm không gian mà thanh trạng thái được sử dụng để chiếm.
Cố định vấn đề này bằng cách:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
- 1. UINavigationBar xuất hiện override trong iOS 5
- 2. UINavigationBar xuất hiện dưới dạng bán mờ thay vì màu trắng mờ
- 3. iOS 5 [UINavigationBar xuất hiện] setBackgroundImage không hoạt động
- 4. Ẩn Statusbar khỏi MPMoviePlayerController
- 5. overlay statusbar Android với ActionBar
- 6. hebrew xuất hiện dưới dạng dấu hỏi trong netbeans
- 7. Chuỗi không có [NSString stringWithFormat:] xuất hiện dưới dạng "(null)"
- 8. WPF <StatusBar> không được đặt ở dưới cùng của cửa sổ
- 9. ASP.NET MVC 3 Controller - làm cho mọi thứ dưới điều khiển nhà xuất hiện dưới miền
- 10. Thay đổi UINavigationBar Height
- 11. Phát hiện chạm để hiển thị/ẩn UINavigationBar
- 12. Cách đặt phông chữ và màu của tiêu đề trong UINavigationBar bằng cách sử dụng API xuất hiện iOS5?
- 13. Anchor ToolStripProgressBar ở bên phải StatusBar (StatusStrip)
- 14. Customize UINavigationBar phông chữ
- 15. UINavigationBar màu mặc định
- 16. Cách thêm UIPickerView tùy chỉnh vào UINavigationBar?
- 17. Proxy xuất hiện - setShadowHình ảnh thay thế cho iOS 5?
- 18. Thay đổi kích thước UINavigationBar khi xoay
- 19. django admin - xuất khẩu dưới dạng csv
- 20. Xuất nhận xét dưới dạng nhận xét
- 21. Cách thay đổi UIBarButtonItem trong UINavigationBar
- 22. Thay đổi hình nền UINavigationBar
- 23. Đặt màu nền cho UINavigationBar
- 24. Ẩn tiêu đề khỏi UINavigationBar?
- 25. Cách thêm nút vào UINavigationBar?
- 26. Đặt tiêu đề của UINavigationBar
- 27. Cách tạo bóng thả UINavigationBar
- 28. Tự động ẩn UINavigationBar và UIToolbar
- 29. Đặt chú thích bảng chế độ org xuất hiện bên dưới bảng khi được xuất sang LaTeX
- 30. Xuất dendrogram dưới dạng bảng trong R
Cảm ơn bạn.Điều này đã khiến tôi khốn khổ. – bdmontz
Wow, wow. Đây là giải pháp tôi đã tìm kiếm! Vấn đề của tôi là nếu người dùng đóng ứng dụng, xoay thiết bị và khởi chạy lại nó, tôi sẽ nhận được thanh trạng thái phủ lên. Nó thậm chí không xảy ra với tôi rằng có lẽ các sự kiện luân phiên đã bị sa thải cho các cuộc phỏng vấn về tái khởi động. Điều này giải quyết nó! – Shizam
Bạn, thưa Ngài, là một quý ông, một học giả và một hiệp sĩ. –