2013-01-31 90 views
29

應用程序支持:iOS6 +當從橫向推動時強制縱向定位視圖控制器

我的應用程序適用於縱向和橫向。但是1個控制器只能在肖像中工作。

問題是,當我在風景中,並推動視圖控制器新的viewcontroller在風景,直到我把它旋轉到肖像。然後它應該是卡在肖像。

是否可以始終使其以縱向顯示?即使它的父母在風景中推動它?

所有下面的代碼並不能幫助

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; 

而且此代碼的​​工作之前,除非我沒有從橫向推How to force a UIViewController to Portrait orientation in iOS 6

回答

30

我解決了這個在viewDidLoad中

加上下面幾行
UIViewController *c = [[UIViewController alloc]init]; 
[self presentViewController:c animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
+1

確認,作品! – Chris

+1

+1:我需要在視圖控制器出現之前「強制」視圖控制器的方向,並且這樣做。希望我知道強制定位的「官方」方法,但在我這樣做之前,我會使用這種方法。 – brainjam

+2

如果您打算不止一次地調用視圖,我建議將這些行添加到viewWillAppear。 – ChavirA

3

首先,你需要創建一個類別:

UINavigationController + Rotation_IOS6.h

#import <UIKit/UIKit.h> 

@interface UINavigationController (Rotation_IOS6) 

@end 

的UINavigationController + Rotation_IOS6.m:

#import "UINavigationController+Rotation_IOS6.h" 

@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

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

@end 

然後,您實現這些方法在你的類,你想成爲唯一的景觀:

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

如果你正在使用的UITabBarController,只需更換UITabBarController的UINavigationController。 經過長時間的搜索,這個解決方案對我很好!我和你現在的情況一樣!

編輯

於是,我看到了你的樣品。你需要做一些改變。 1 - 爲UINavigationController類別創建一個新類。將該類命名爲UINavigationController + Rotation_IOS6(.h和.m) 2 - 您無需實施方法preferredInterfaceOrientationForPresentation。您的類別應該是這樣的:

#import "UINavigationController+Rotation_IOS6.h" 

@implementation UINavigationController (Rotation_IOS6) 

-(BOOL)shouldAutorotate 
{ 
    return [[self.viewControllers lastObject] shouldAutorotate]; 
} 

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

@end 

3 - 你要旋轉僅在景觀類,包括這在執行,正是這樣:

// Rotation methods for iOS 6 
- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 

4 - 我會建議給還包括用於自轉iOS 5的方法的類內要進行橫向:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight; 
} 
+0

我已經做了相同的實現,但它不工作。我已經創建了一個樣本,你可以檢查一下嗎? https://github.com/tariq235/ForcePortrait – Tariq

+0

我看了一下你的代碼,應該做一些改變!我編輯了我的答案...檢查出來,然後告訴結果... – CainaSouza

+1

嘿,首先感謝花時間在我的源代碼上。由於我需要第二個控制器強制肖像模式而不是風景模式,所以我將MaskLandscape的代碼更改爲MaskPortrait。並且我根據您的指示更新了github代碼,但仍然無法使用。我的問題是,如果第一個控制器處於橫向模式,然後單擊按鈕導航,則第二個控制器不應在橫向中可見。它應該做強制肖像旋轉。 – Tariq

相關問題