2013-10-23 63 views
7

Câu chuyện thông thường - Tôi đang chạy ứng dụng iOS 5/6 chạy dưới iOS 7 và thay đổi hành vi thanh điều hướng đang gây ra sự cố.Ẩn Thanh điều hướng di chuyển "lên"

Ứng dụng đã hoạt động như mặc định iOS 7 với chế độ xem toàn màn hình và thanh điều hướng mờ "trên" của chế độ xem. Vấn đề là ẩn/bỏ ẩn thanh điều hướng gây ra hành vi khác nhau trong iOS 7. Trên iOS 5/6 ẩn/bỏ ẩn thanh điều hướng không thay đổi chế độ xem. Trên iOS 7, ẩn thanh di chuyển trực quan xem lên để lại một thanh trống ở dưới cùng của màn hình và bỏ ẩn thanh di chuyển xem lại xuống để chiếm toàn bộ màn hình (với thanh nav trên đầu trang, tất nhiên).

Tôi cần tiếp tục hỗ trợ iOS 5 vì vậy tôi không sử dụng bố cục tự động, nhưng tôi sử dụng toàn màn hình. Tôi có chế độ xem trong đó tôi đang xem hình ảnh có thể thu phóng - do đó, trình điều khiển chế độ xem có chế độ xem toàn màn hình chứa một scrollView có chứa một imageView.

Thanh trạng thái luôn bị ẩn.

Tôi truy cập trình điều khiển chế độ xem qua bộ điều khiển điều hướng để có thanh điều hướng (đen, mờ) nằm trên đầu chế độ xem toàn màn hình/scrollView/imageView của tôi.

Sau một thời gian trễ ngắn, một số nhãn che mờ dần và thanh điều hướng bị ẩn Một lần nhấn duy nhất khôi phục nhãn lớp phủ và bỏ ẩn thanh điều hướng. Tính năng này hoạt động trên iOS 5/6 - thanh điều hướng trượt ra khỏi đầu màn hình để phát hiện phần đầu của chế độ xem/hình ảnh.

Trên iOS 7, khi thanh điều hướng trượt ra khỏi đầu màn hình, toàn bộ màn hình sẽ di chuyển lên một số tiền tương ứng (tức là 44 điểm) để lại một thanh màu đen ở cuối màn hình. Tôi có thể thấy điều này bằng cách thiết lập một màu nền trên giao diện cấp cao nhất và thay đổi kích thước scrollview đủ để xem nền; phía trên cùng của màn hình thực sự di chuyển ra khỏi màn hình và màu nền không được vẽ phía dưới (44 điểm) của màn hình.

NHƯNG, self.view.frame không thay đổi và duy trì ở {0, 0} 320 x chiều cao.

Khi tôi nhấn một lần để khôi phục thông tin lớp phủ và thanh điều hướng, chế độ xem sẽ chuyển xuống để chiếm toàn màn hình và thanh điều hướng mờ nằm ​​phía trên cùng của chế độ xem/hình ảnh.

Không có gì tôi đã thử thay đổi hành vi: Thay đổi điều khiển bố cục bộ điều khiển chế độ xem IB (Dưới thanh trên cùng, Dưới thanh dưới cùng, Điều chỉnh chế độ xem cuộn). Xây dựng cho 5.1, 6.1 và 7.0 đều tạo ra kết quả tương tự khi chạy dưới 7.0.

self.edgesForExtendedLayout = UIRectEdgeNone 

không làm gì cả. Sử dụng giá trị delta delta không làm gì cả. Trong IB, chế độ xem trông giống nhau khi "được xem là" iOS 7 và iOS 6 trở về trước. Tôi in ra nhiều thông tin gỡ lỗi nhưng không có gì về chế độ xem (hoặc chế độ xem cuộn) dường như thay đổi khi chế độ xem di chuyển "tắt màn hình".

Mã cho thấy các thông tin lớp phủ (chạy khi xem hiển thị lần đầu và một lần-vòi) là:

- (void) showOverlayInfo { 
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
    [[[self navigationController] navigationBar] setTranslucent:YES]; 
    [[self navigationController] setNavigationBarHidden:NO animated:NO];  

    overlayInfoHidden = NO; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = NO; 
    self.infoButton.alpha = 1; 
    self.descriptionLabel.hidden = NO; 
    self.descriptionLabel.alpha = 1; 
} 

Mã mà giấu đi những thông tin lớp phủ là:

- (void) hideOverlayInfo { 
    overlayInfoHidden = YES; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = YES; 
    self.descriptionLabel.hidden = YES; 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

Vì vậy, ai có thể cho tôi biết những gì (có lẽ là đơn giản) điều tôi đang mất tích?

Trả lời

10

Cuối cùng tôi đã tìm thấy sự cố của mình.

Thực tế chính là bộ điều khiển chế độ xem hình ảnh ở trong UIPageViewController, vì vậy những gì tôi đang xem và thử nghiệm thực sự là "bên trong" một bộ điều khiển chế độ xem khác. Mặc dù tôi đã tắt cài đặt bộ điều khiển chế độ xem Điều chỉnh chế độ xem cuộn xem cho trình xem hình ảnh VC, tôi đã không thực hiện nó cho VC chứa UIPageViewController và UIPageViewController trình bày các trang trong một số lớp con của UIScrollView. Khi tôi thay đổi chúng cho VC mẹ, vấn đề biến mất.

Vì vậy, tôi nghĩ rằng đạo đức của câu chuyện là:

  • Hãy suy nghĩ về những vấn đề toàn cầu hơn khi địa phương không hoạt động vì có thể bạn đang thiếu một số bối cảnh quan trọng.
  • Nếu bạn không muốn sử dụng hành vi iOS 7, hãy thay đổi cài đặt cho mọi bộ điều khiển chế độ xem đơn bạn có!
Các vấn đề liên quan