2012-09-23 30 views
10

Tôi có một ứng dụng mà tôi có một lớp con UINavigationController làm rootViewController. Tôi có một số UITableViewController cho phép người dùng chỉnh sửa một số cài đặt, nó luôn ở chế độ dọc. Ứng dụng của tôi cũng cần hỗ trợ tất cả các định hướng khác sau khi tôi đẩy thành phần MoviePlayer vào bộ điều khiển điều hướng.Vấn đề xoay vòng tự động iOS 6 - được hỗ trợInterfaceGiá trị trả về tự động không được tôn trọng

Các UITableViewController lớp con có thực hiện này của supportedInterfaceOrientations:

- (NSUInteger)supportedInterfaceOrientations { 
    LLog(); 
    return UIInterfaceOrientationMaskPortrait; 
} 

lệnh Việc khai thác gỗ nói với tôi rằng điều này được thực sự gọi.

Vấn đề là giá trị trả lại không được tôn trọng, tức là màn hình chuyển sang hướng ngang khi tôi bật thiết bị.

Tôi có thể làm gì để làm cho chế độ xem cài đặt luôn hiển thị ở chế độ dọc nhưng cho phép thay đổi hướng cho trình xem video?

Thông tin khác: UINavigationController lớp con của tôi không ghi đè lênĐược yêu cầu hoặc được hỗ trợInterfaceOrientations. Tôi đã không được thực hiện

- (NSUInteger)application:(UIApplication *)application 

supportedInterfaceOrientationsForWindow:(UIWindow *)window 
phương pháp

trong tôi appdelegate và tôi đã kích hoạt tất cả các định hướng trong phần tóm tắt mục tiêu.

Trả lời

17

Tôi đã phát hành rằng một số ViewControllers trong ngăn điều hướng hỗ trợ tất cả các hướng, một số ảnh chân dung duy nhất, nhưng bộ điều khiển UINavigation đã trả về tất cả các hướng hỗ trợ ứng dụng, hack nhỏ này đã giúp tôi.

@implementation UINavigationController (iOS6OrientationFix) 

-(NSUInteger) supportedInterfaceOrientations { 
    return [self.topViewController supportedInterfaceOrientations]; 
} 

@end 
+0

Đây chắc chắn là giải pháp sáng tạo nhưng tôi không thể tin đây là những gì Apple mong đợi. Tôi đang gặp khó khăn trong việc tìm hiểu kế hoạch autorotation mới của họ. Họ nói các quy tắc ViewController toàn màn hình hàng đầu. Nhưng, giống như bạn đang chỉ ra, ViewController toàn màn hình trên cùng là trong nhiều trường hợp NavigationController. Vậy thì chúng ta có phải phân lớp nó hay tạo một thể loại để thực hiện thông báo supportedInterfaceOrientations? Không cảm thấy đúng. – eddy

+0

Nó không cảm thấy đúng với tôi quá, có lẽ nó chỉ là một lỗi trong việc thực hiện của Apple. – Mindaugas

+0

Điều này không phù hợp với tôi. Tôi đã cố gắng phân lớp cũng như từ Danh mục không đảm bảo ghi đè phương pháp: ( – Pacu

2

Bạn cũng cần phải thêm:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

và thiết lập các phép quay được hỗ trợ cho các gốc điều khiển xem trong file ứng dụng plist để chỉ portrait.

2

Loại dành cho UINavigationController không hoạt động đối với tôi. Tôi không biết tại sao. Tôi giải quyết vấn đề của tôi với loại như vậy UIViewController:

@implementation UIViewController (Orientation) 

- (BOOL) shouldAutorotate 
{ 
    return YES; 
} 


- (NSUInteger)supportedInterfaceOrientations 
{ 
    NSUInteger orientations = UIInterfaceOrientationMaskPortrait; 

    if ([self isKindOfClass:[PlayerViewController class]]) 
    { 

     orientations |= UIInterfaceOrientationMaskLandscapeLeft; 
     orientations |= UIInterfaceOrientationMaskLandscapeRight; 

    } 

    return orientations; 
} 

@end 
Các vấn đề liên quan