2013-08-22 32 views
32

Tôi đã cố gắng thử nghiệm ứng dụng của mình trong iOS 7 và sau đó tôi thấy chế độ xem của mình xuất hiện trên thanh trạng thái ... Như tôi đã đọc, trong iOS 7, thanh trạng thái bị ẩn . Vậy làm thế nào để tôi làm cho nó tương thích để chạy cả iOS 6 và iOS 7? Tôi có nên tạo các tệp .xib khác nhau cho các phiên bản iOS khác nhau cho mỗi màn hình không? Nếu có cả hai phiên bản của một ứng dụng chuẩn nên có bố cục tương tự, hãy sử dụng Bố cục Tự động để tạo giao diện người dùng hoạt động chính xác trong cả hai phiên bản iOS. Để hỗ trợ nhiều phiên bản iOS, chỉ định một tập hợp các ràng buộc mà Bố cục tự động có thể sử dụng để điều chỉnh chế độ xem và điều khiển trong bảng phân cảnh hoặc tệp XIB (để tìm hiểu thêm về các ràng buộc, xem “Ràng buộc thể hiện mối quan hệ giữa các chế độ xem”).Thanh trạng thái xuất hiện trên giới hạn của chế độ xem của tôi trong iOS 7

Nếu cả hai phiên bản của ứng dụng chuẩn đều phải có bố cục tương tự và bạn không sử dụng Bố cục tự động, hãy sử dụng bù trừ. Để sử dụng bù trừ, trước tiên hãy cập nhật giao diện người dùng cho iOS 7. Tiếp theo, chỉ định các giá trị xác định nguồn gốc, chiều cao và chiều rộng của từng phần tử trong giao diện người dùng trước đó dưới dạng bù đắp từ vị trí mới của phần tử trong giao diện người dùng iOS 7.

Nhưng khi tôi sử dụng autolayout trong .xib, nó cho thấy một lỗi mà autolayout là trong một phiên bản trước lên iOS 6.

Làm thế nào để khắc phục vấn đề này?

+2

Bạn nên đặt câu hỏi liên quan đến ios7 cho diễn đàn nhà phát triển của Apple vì nó vẫn còn trong NDA. – cahn

+0

Xem liên kết này: http://stackoverflow.com/questions/17678881/how-to-change-status-bar-text-color-in-ios-7 – Developer

+0

@Developer tôi đã đi qua liên kết này .. nó sẽ trạng thái thanh màu xám nhạt .. nhưng vấn đề của tôi là thiết lập khung màn hình ui của tôi ... như toàn bộ màn hình của tôi 20 pixel lên ... trong ios7 nhưng đến bình thường trong ios6 ... – Bhrigesh

Trả lời

9

Tôi gặp vấn đề tương tự. Để bây giờ tôi thực hiện hai hacks và sẽ quyết định mà tôi sẽ đi:

  • Bạn có thể ẩn thanh trạng thái hoàn toàn bằng cách thiết lập UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance là true.
  • Trong ứng dụng của tôi, tôi tạo ra một hạn chế với giá trị 0 trên Spacing, và tôi programmaticaly thay đổi nó đến 20 nếu tôi phát hiện rằng các ứng dụng đang chạy trên iOS 7.

Làm thế nào để làm cho tài khoản Autolayout cho khu vực thanh trạng thái?


Vâng, tôi đã tìm ra.

Trong sub-view của bạn (BRSMyListSubViewController trong trường hợp của tôi), trong viewDidLoad, bạn cần phải thiết lập một trong hai

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.automaticallyAdjustsScrollViewInsets = NO; 

HOẶC

self.edgesForExtendedLayout = UIRectEdgeNone; 
self.extendedLayoutIncludesOpaqueBars = YES; 

Điều thú vị đủ, trong bộ điều khiển xem gốc , các giá trị này được đặt thành mặc định UIRectEdgeAll, NOYES tương ứng, nhưng giá trị của nó là tableView KHÔNG nằm trong thanh điều hướng và chân trang.

Tôi không biết tại sao nó phi logic như vậy.

Cũng lạ là edgesForExtendedLayout phải được trộn lẫn với một trong hai thuộc tính khác mặc dù nó chịu trách nhiệm rõ ràng về hành vi.

37

iOS 7 dường như hỗ trợ Thanh trạng thái bị ẩn cho một số chế độ xem nhưng không bị ẩn đối với một số chế độ xem khác. Để ẩn nó cho tất cả các chế độ xem, hãy thực hiện như sau:

  1. Đảm bảo Hide during application launch vẫn được chọn để hỗ trợ các phiên bản hệ điều hành trước đó.
  2. Trong tệp Info.plist của bạn, hãy thêm View controller-based status bar appearance và đặt thành NO.
  3. Bạn có thể cần phải "Làm sạch" trước khi xây dựng, (tôi đã làm), nhưng sau đó ứng dụng của bạn sẽ hoạt động như trước: không có thanh trạng thái treo trên chế độ xem của bạn!
+4

Điều này làm việc cho tôi ngoại trừ thanh trạng thái xuất hiện lại sau khi hiển thị UIImagePicker. – Swindler

+1

Ah, tìm thấy câu trả lời cho vấn đề bộ chọn hình ảnh tại đây: http://stackoverflow.com/a/18747724/455794 – Swindler

+2

Điều này dường như ẩn hoàn toàn thanh trạng thái mà tôi không muốn làm. Lý tưởng nhất, tôi chỉ muốn thay đổi nội dung của mình để thanh trạng thái không di chuột qua nó và chồng lên tiêu đề ứng dụng của tôi. FYI Tôi đang tạo một ứng dụng phonegap/cordova. – njtman

24

Có thể bạn cần phải thêm mã sau vào mỗi bộ điều khiển chế độ xem.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
    { 
     [self prefersStatusBarHidden]; 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; 
    } 
    else 
    { 
     // iOS 6 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
    } 
} 

// Add this method 
- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 
+1

+1 hoạt động của nó. –

+1

Chỉ cần thêm phương thức prefersStatusBarHidden là đủ. – SG1

+1

@ SG1 preferStatusBarHidden chỉ khả dụng cho ios7 vì vậy tôi nghĩ bạn muốn ứng dụng của mình hoạt động trên ios 6 cũng như cho đến khi thiết bị trên toàn thế giới có ios7 ;-) – NIKHIL

3

Không cần thiết phải xây dựng multi-xib. Tôi nghĩ rằng vấn đề của bạn là "20px": cùng một tệp XIB trông tuyệt vời trong iOS   6 nhưng nó thiếu 20 pixel trong iOS   7.

Ví dụ: bạn có chế độ xem và Y = 0. Trong iOS   6, bên cạnh thanh trạng thái. Trong iOS   7, nó xuất hiện trên thanh trạng thái.

Bạn nên sử dụng Xcode 5 để mở tệp XIB của mình và bật trình chỉnh sửa trợ lý. Thực hiện theo các bước sau:

  1. Chọn tập tin thanh tra, và chuyển sang "View As" để "iOS 7 và sau đó"

  2. Chọn kích thước thanh tra, và điền deltay với "-20"

  3. Xong rôi!

+2

điều này nghe có vẻ hiệu quả nhưng tôi không thể làm việc trên iPhone 5 của tôi/iOS 7 GM, ứng dụng được xây dựng với Xcode 5 GM. Giải pháp của bạn dường như không có hiệu lực. Tôi cũng đã thử làm sạch dự án. – njtman

+0

Điều này đã làm các trick :) nhưng bạn phải thiết lập trong mỗi view/subview của xib. –

+0

Có một câu trả lời với một số mã trên một mục có liên quan. @Stunner stackoverflow.com/a/18976660/235206 có giải pháp – MiKL

0

Bạn chỉ cần một lần cần phải kiểm tra kích thước UIView chính của bạn dành cho iOS 7.0 & sau & iOS 6.0 & thấp hơn, có thể bạn sẽ nhận được ý tưởng.

Từ iOS 7 Apple đã thay đổi kích thước chế độ xem chính = cố định Nó có nghĩa là nếu bạn thêm thanh điều hướng, thanh tab kích thước xem của bạn vẫn giữ nguyên [iPhone 4s: 320 * 480, iPhone 5: 320 * 568].

8

Nếu bạn muốn hiển thị thanh trạng thái trong iOS   7 với Xcode 5, chỉ cần sắp xếp lại các nút và các bản xem phụ khác để tạo đủ không gian xung quanh thanh trạng thái. Nhưng, chỉ cần chờ đợi! Tôi cũng muốn hỗ trợ iOS   6. Làm thế nào để làm điều đó?

Tôi tìm thấy documentation from Apple và tìm thấy tiêu đề "Hỗ trợ hai phiên bản của ứng dụng chuẩn" trong tài liệu.

Nếu bạn đang chỉnh sửa XIB file, hãy chọn nó và nhấp vào trình chỉnh sửa trợ lý. Bạn sẽ có thể tìm thấy menu "thủ công, tự động ..." ở đó. Sau đó chọn "xem trước".

Enter image description here

Sau đó, bạn sẽ tìm thấy bố cục chế độ xem cạnh nhau. Sau đó, bạn sẽ nhận thấy rằng có một nút bật lên xung quanh phía dưới bên phải của khung bên phải (xem); nó nói "iOS   7 và sau đó". Bạn có thể chọn "iOS   6.1 trở về trước". Woa! Bây giờ bạn có thể thực hiện điều chỉnh cho iOS   6.1 mà không ảnh hưởng cách bố trí của iOS   7.

Enter image description here

Nếu bạn đang làm việc trên các kịch bản, nó là cơ bản giống nhau.Bạn chọn một đối tượng điều khiển xem, và bấm vào chế độ soạn thảo trợ lý, chọn "xem trước", sau đó "iOS7 và sau đó" ... Bluh Bluh Bluh.

Tôi không chắc chắn, nhưng chỉ trình chỉnh sửa trợ lý có khả năng chuyển sang chế độ iOS   7 +/iOS   6-. Tôi mới tìm thấy điều này rất gần đây, vì vậy xin vui lòng chỉ ra, nếu có bất kỳ hiểu lầm hoặc thủ thuật khác.

+3

"Bây giờ bạn có thể thực hiện điều chỉnh cho iOS 6.1 mà không ảnh hưởng đến bố cục của iOS 7". Tôi không nghĩ điều này là đúng. Nó chỉ là một công cụ xem trước. –

+0

Tùy chọn cho "iOS 7 trở lên" cũng có thể được tìm thấy tại "Trình kiểm tra tệp" của Trình điều khiển Chế độ xem cho bảng phân cảnh – RootCode