2012-10-02 21 views
28

Lỗi này không có ý nghĩa, như định hướng ưu tiên UIInterfaceOrientationLandscapeRight được trả về bởi phương hướng hỗ trợpreferredInterfaceOrientationForPresentation phải trả về một định hướng giao diện hỗ trợ

//iOS6 

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationLandscapeRight | UIInterfaceOrientationLandscapeLeft); 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Lỗi:

Chấm dứt ứng dụng do ngoại lệ còn tự do 'UIApplicationInvalidInterfaceOrientation', lý do: 'preferredInterfaceOrientationForPresentation phải trả lại định hướng giao diện được hỗ trợ!'

Trả lời

52

Mã của bạn sẽ trông như thế này:

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Ngoài ra, hãy chắc chắn trong bạn Info.plist bạn đã thiết lập các định hướng chính xác cho bạn ứng dụng bởi vì những gì bạn trở về từ supportedInterfaceOrientations được giao nhau với Info.plist và nếu nó không thể tìm thấy một phổ biến thì bạn sẽ nhận được lỗi đó.

+0

Tôi đang tìm điều này khiến tôi đau buồn! Tôi có một mã điều khiển xem chia sẻ ứng dụng toàn cầu và sử dụng kiểm tra mã ở trên cho thành ngữ người dùng. ipad cần phải được chỉ cảnh quan và chân dung iphone cho tất cả các thanh mà cần phải được phong cảnh. Tôi không thể có được điều này để cung cấp các định hướng chính xác tại – user7865437

+3

Lưu ý rằng đó là phần "Mặt nạ" của "UIInterfaceOrientationMaskLandscape" là phần quan trọng của câu trả lời này. Các poster ban đầu sử dụng enum sai trong phương pháp của mình. Nó có vẻ hơi ngớ ngẩn khi Apple tạo ra một tập hợp enum/options cho phương pháp này dẫn đến những người làm lỗi này dễ dàng - ngoài ra Xcode thậm chí không cung cấp bất kỳ thời gian kiểm tra trình biên dịch nào vì phương thức trả về NSUInteger. –

+1

@lms, Toàn bộ ứng dụng của tôi chỉ hỗ trợ cho chế độ Chân dung ngoại trừ một Chế độ xem (cần hỗ trợ cho Chế độ ngang). Trong Plist tôi đã thiết lập định hướng chỉ cho Portrait và tôi đã viết ở trên mã ở nơi tôi muốn thay đổi định hướng cho Landscape. Nhưng nó cho UIInterfaceOrientationLandscapeRight Hoặc UIInterfaceOrientationLandscapeLeft.But tôi muốn cả hai trong quan điểm của tôi. U có thể điện thoại cho tôi làm thế nào tôi có thể nhận được nó. –

8

Đó là những thông tin sai cho supportedInterfaceOrientations. Bạn cần phải sử dụng UIInterfaceOrientationMaskLandscapeLeft, vv (lưu ý từ mặt nạ ở giữa)

14

supportedInterfaceOrientations chỉ được gọi, nếu shouldAutorotate được thiết lập để YES

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation 
{ 
    return UIInterfaceOrientationLandscapeRight; 
} 

Cách tiếp cận dễ nhất đối với tôi, chỉ là để thiết lập Info.plist

info.plist

Nếu bạn thích để hỗ trợ iOS 5 sử dụng mã này trong bộ điều khiển chế độ xem của bạn.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 
1

từ các tài liệu:

-(NSUInteger)supportedInterfaceOrientations { 

    return UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskLandscapeLeft; 
} 

Lưu ý rằng định hướng đúng là "Mask"! Bạn đã thử cái này chưa?

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