2014-10-23 17 views
5

kể từ iOS 8 Ứng dụng của tôi chạy khá tốt, nhưng tôi đã tìm thấy Sự cố khi thử nghiệm ứng dụng này. Nó chỉ xảy ra trên iPad và chỉ khi tôi khởi chạy ứng dụng ở chế độ ngang. Nếu nó khởi chạy trong Chân dung mọi thứ đều đúng (không có vấn đề xoay vòng). Nếu tôi xoay thiết bị (mô phỏng hoặc thiết bị thực) thì chế độ xem sẽ quay ra khỏi màn hình và chỉ hiển thị Cắt chế độ xem thực và phần còn lại là màu đen.Đây có phải là lỗi iOS 8 (vấn đề định hướng khi xoay vòng) không?

enter image description here

enter image description here

Bất cứ ai khác đã nhận thấy lỗi như vậy? Làm thế nào tôi có thể sửa chữa nó?

+1

Nếu không nhìn thấy những hình ảnh, phản ứng ban đầu của tôi dựa trên những gì bạn mô tả là bạn có lẽ có một vấn đề với các ràng buộc bố trí tự động của bạn. Vấn đề có biến mất khi bạn xoay sau đó quay lại cảnh quan không? – squarefrog

+0

Nếu tôi xoay nó trở lại cách tôi khởi chạy nó ở chế độ ngang, chế độ xem được hiển thị đúng, nhưng nếu tôi xoay các lỗi như đã bị phân loại. Nhưng điều đó chỉ xảy ra nếu tôi khởi động ứng dụng ở chế độ ngang. –

+0

Bạn có thể cung cấp liên kết đến ảnh chụp màn hình của mình trên trang web của bên thứ ba như [imgur] (http://imgur.com) không? Bạn đã thiết lập các ràng buộc bố cục tự động nào? – squarefrog

Trả lời

4

Đã vấn đề tương tự. Đáng ngạc nhiên sửa chữa là để nhận xét ra tất cả các mã liên quan đến self.window trên Appdelegate.

Khởi tạo nhận xét về self.window và nhiệm vụ của nó. Đặt chế độ xem ban đầu trong bảng phân cảnh trong thanh tra Thuộc tính bằng cách chọn hộp kiểm "Kiểm soát chế độ xem ban đầu".

Giải pháp mới tốt hơn
Bình luận self.window đã gây ra các vấn đề khác. Thay vào đó các mã dưới đây là tốt nhất:

- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification 
    { 
     [UIViewController attemptRotationToDeviceOrientation]; 
    } 
+0

Điều này dường như không sửa chữa nó cho tôi, nhưng tôi có cùng một vấn đề chính xác. Tôi có một ứng dụng đó là tất cả các chân dung ngoại trừ một bộ điều khiển xem mà đặt nó trong cảnh quan. Nếu tôi xoay khung nhìn trở nên sôi nổi. Đây là trên bất kỳ kích thước iphone với iOS 8. – CodyMace

+0

@CodyMace Tôi đang gặp vấn đề chính xác tương tự. Bạn đã sửa nó à? – doxsi

2
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight); 
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f", 
     (landscape ? @"Yes" : @"No"), 
     [[UIScreen mainScreen] bounds].size.width, 
     [[UIScreen mainScreen] bounds].size.height); 

Và kết quả là: Đối với iOS 8+

Currently landscape: No, width: 320.00, height: 568.00 
Currently landscape: Yes, width: 568.00, height: 320.00 

và dành cho iOS 7-

Currently landscape: No, width: 320.00, height: 568.00 
Currently landscape: Yes, width: 320.00, height: 568.00 

Nó có vẻ như có sự thay đổi trong chiều cao và chiều rộng của đường màn hình được xử lý trong khi ở chân dung và phong cảnh từ ios8 trở đi.

Kiểm tra liên kết này Is [UIScreen mainScreen].bounds.size becoming orientation-dependent in iOS8?

2

CẬP NHẬT - Chúng tôi tìm thấy một sửa chữa:

Tôi tìm thấy câu trả lời cho vấn đề của chúng tôi mà như mô tả dưới đây dường như là chính xác giống như bạn. Một trong những nhà phát triển khác của chúng tôi đã nhận thấy "số không mong muốn trong cửa sổ chính" khi cố nhấn vào bên phải của màn hình. Điều này đã dẫn tôi làm một tìm kiếm mới và tôi tìm thấy chuỗi này trên stackoverflow mà thực sự chứa câu trả lời cho vấn đề của chúng tôi.

(ở đây là liên kết cho câu hỏi đó giúp câu trả lời của tôi: unexpected nil window in _UIApplicationHandleEventFromQueueEvent)

Câu trả lời thực tế đến từ Frankish người đề nghị mở main.xib (hoặc kịch bản chính) và nhấp vào cửa sổ trong đó và làm đảm bảo rằng các thuộc tính "Hiển thị lúc khởi chạy" và "Toàn màn hình lúc khởi động" được chọn (được đặt thành true.)

Trong trường hợp của chúng tôi, nó CHỈ là thuộc tính "Toàn màn hình lúc khởi chạy" cần thiết, nhưng thiết lập vấn đề xoay cố định mà chúng tôi đã thấy và nó đã khắc phục sự cố khi khởi chạy trên iPad ở chế độ ngang bên phải của màn hình không thể chạm được.

END CẬP NHẬT - (ban đầu không trả lời dưới đây)

câu trả lời của tôi không phải là một câu trả lời, nhưng tôi đã chạy vào cùng một vấn đề chính xác. Khi xoay vòng trong ứng dụng của chúng tôi, khi xây dựng bằng Xcode 6, tôi thấy chính xác vấn đề hiển thị giống như các ảnh chụp màn hình về câu hỏi này. Chính xác cùng vị trí xoay với các thanh màu đen ở phía bên và phía dưới. (Ứng dụng của chúng tôi trên iPhone không hỗ trợ bất kỳ xoay vòng nào vì vậy chúng tôi không thấy sự cố trên iPhone. Trên iPad, chúng tôi hỗ trợ phong cảnh bên trái và bên phải. Khi xoay từ một sang khác, khi iPad thực hiện hoạt ảnh xoay tiêu chuẩn, sẽ xoay ra khỏi vị trí (hiển thị các thanh màu đen) khi đi một chiều và sau đó xoay trở lại vào vị trí thích hợp khi quay trở lại hướng được hỗ trợ khác.Tôi không tin rằng nó liên quan đến bất kỳ định vị tùy chỉnh hoặc mã hoạt hình nào. Có vẻ như không phải mọi dự án đều có vấn đề này trong iOS nhưng tôi đã không gặp những vấn đề cụ thể đang gây ra vấn đề này. vấn đề và xem xét mã của chúng tôi và tôi không có gì.

Một thông tin bổ sung. Nếu tôi xây dựng bằng Xcode 6 và chạy trên một thiết bị chạy iOS 7 thì không có vấn đề gì. Vấn đề này CHỈ xảy ra khi tôi xây dựng bằng Xcode 6 và chạy trên thiết bị có iOS 8.

Đây là liên kết tới câu hỏi của riêng tôi được đăng ngày hôm qua về vấn đề này. (Tôi đã không đi qua câu hỏi này cho đến sau khi tôi đăng câu hỏi của tôi.)

Building project with Xcode 6 (iOS 8 SDK) causes landscape rotation rendering issue on iPad

+0

Có, điều đó chỉ xảy ra với iOS 8 :) Tôi đã sửa lỗi này bằng window.visible = false. –

0

Tôi thấy điều này là một vấn đề khi tôi đã có nhiều cửa sổ trong ứng dụng của tôi. Bằng cách đặt điểm ngắt trên -[UIWindow setFrame:], tôi có thể thấy rằng khi xoay vòng, hệ thống đã cho tôi kích thước và vị trí khung sai. Bạn có thể giải quyết vấn đề này bằng cách đặt khung của bạn theo cách thủ công là có vẻ đúng nếu bạn chạy trên iOS7 + và biên dịch bằng Xcode6. Tôi thấy rằng làm điều này trong -[UIWindow becomeKeyWindow] làm việc tốt cho tôi:

- (void)becomeKeyWindow { 
    [super becomeKeyWindow]; 

    self.frame = [UIScreen mainScreen].bounds; 
} 
Các vấn đề liên quan