8

Tôi có một UITabBarController được trình bày ở chế độ Chân dung. Trên một trong các tab tôi có một nút cho thấy một UIViewController modally (Một segue storyboard đơn giản thực hiện các hành động).Modal View Controller force Định hướng cảnh quan trong iOS 6

Tôi muốn chế độ xem phương thức này được hiển thị ở chế độ ngang, nhưng tôi không thể biến nó thành chế độ tự động.

Tôi có điều này trong bộ điều khiển xem phương thức

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
} 

Tôi đã thêm landscapeLeft đến định hướng plist hỗ trợ (mặc dù điều này cũng cho phép TabBar để được luân chuyển mà tôi không muốn)

Tôi cũng đã thêm mục này vào ViewDidLoad của chế độ xem phương thức

[UIApplication sharedApplication].statusBarOrientation = UIInterfaceOrientationLandscapeLeft; 

nhưng tôi không thể tự xoay nó.

Cảm ơn

EDIT ----

Dường shouldAutoRotate được thậm chí không được gọi!

Ngoài ra, tôi đang cố gắng phát hiện định hướng và mã này bên dưới luôn hiển thị 2, bất kể định hướng!

if ([[UIDevice currentDevice] orientation] == UIInterfaceOrientationPortrait) { 
     NSLog(@"1"); 
     self.hostView.frame = CGRectMake(0, 60, 200, 255); 
    } else { 
     NSLog(@"2"); 
     self.hostView.frame = CGRectMake(0, 45, 480, 255); 
    } 

EDIT 2 ---

xấu của tôi. Tôi đoán tôi nên có đề cập đến tôi đã sử dụng iOS 6. Màn hình tự động xoay trên iOS 5. shouldAutorotateToInterfaceOrientation không được chấp nhận vì vậy tôi cần phải đọc về các phương pháp mới.

+0

từ trải nghiệm trước đây của tôi với điều này, không có cách nào để buộc chế độ xemController xuất hiện theo một hướng cụ thể. Bạn có thể chọn xem bạn có cho phép định hướng thay đổi hay không, nhưng không cho phép định hướng. đó là một con số thấp cho tôi ... – KDaker

+0

Thats một chút ngu ngốc thực sự! Tôi có một đồ thị sẽ chỉ phù hợp với Phong cảnh. Vì vậy, bạn nói rằng Apple muốn tôi để hiển thị nó hơi say cho đến khi người dùng biến thiết bị của mình. Điều đó không có vẻ đúng, mặc dù tôi đã không tìm thấy một giải pháp để bạn có thể đúng. – Darren

Trả lời

7

iOS 6.0 Ghi chú phát hành
"More trách nhiệm được chuyển sang ứng dụng và các đại biểu ứng dụng Bây giờ. , các vùng chứa iOS (chẳng hạn như UINavigationController) không hỏi ý kiến ​​con cái của họ để xác định liệu chúng có nên tự động xác nhận hay không. "

-(BOOL)shouldAutorotate của UIViewController dưới bất kỳ vùng chứa nào (như UINavigationController) sẽ không được gọi từ IOS6.

Đã thử một giải pháp có sử dụng Danh mục để thêm phương thức vào Lớp UINavigationController hiện tại.

bên trong phương thức shouldAutorotate, bạn có thể gọi phương thức shouldorutotate trong mỗi bộ điều khiển chế độ xem của self.viewControllers. Trong thực tế, bạn có thể chuyển đến bộ điều khiển xem con của bạn.

0

Tôi chính xác này trong ứng dụng của tôi, và làm điều đó thông qua shouldAutoRotateToInterfaceOrientation, hơi khác so với bạn:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) 
    return (YES); 
return (NO); 
} 

dành cho iOS 6, bạn cũng phải thiết lập window.rootViewController = {view controller gốc của bạn}; trong ủy quyền ứng dụng của bạn. Tôi hy vọng đây là vấn đề của bạn

+0

Điều này vẫn không bắt buộc phải định hướng. Tôi đã thêm điều này vào AppDelegate của tôi self.window.rootViewController = [[Bảng câu chuyện UIStoryboardWithName: @ "MainStoryboard" bundle: [NSBundle mainBundle]] instantiateViewControllerWithIdentifier: @ "mainTab"]; – Darren

+0

ok tiếc, tôi không sử dụng bảng phân cảnh trong ứng dụng của mình, mặc dù tôi không nghĩ điều đó sẽ gây ra vấn đề này. Tôi nghi ngờ các thuộc tính rootViewController đang được thiết lập cho bạn tự động dù sao đi nữa. Nó sẽ là thú vị để đăng nhập các cuộc gọi đến shouldAutorotate để xem nếu nó thậm chí nhận được gọi là – CSmith

+0

Không, shouldAutorotate không được gọi là ở tất cả! – Darren

1

Trong iOS 6 nó có vẻ là phương pháp này có thể giúp buộc một định hướng cụ thể trên iOS 6.

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

tôi vẫn đang cố gắng để làm cho nó làm việc và sẽ cập nhật với bất kỳ phát hiện nào.

+0

Cảm ơn, nó hoạt động trong trường hợp của tôi cùng với phương thức - (BOOL) shouldAutorotate {return NO;} – Alex

6

Nếu bạn muốn để buộc luân chuyển trong iOS6, rootviewController bạn nên thực hiện những phương pháp này:

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL)shouldAutorotate { 
    return YES; 
} 
Các vấn đề liên quan