2012-04-10 44 views
1

我正在開發基於xib的僅用於橫向的應用。該應用程序正確啓動。但是,我的主ViewController中的視圖以縱向呈現。也就是說,它被旋轉了90度,這樣圖像就會出現裁剪,並且不會佔用整個屏幕。如果我使用我的界面來呈現模式視圖控制器,然後返回到主ViewController,則問題會自行更正(視圖以橫向顯示)。這個問題在Xcode 4.2下沒有發生。它在升級到Xcode 4.3之後發生,當升級項目設置時,唯一修改的代碼是由Xcode自動實現的。UIWindow的根視圖控制器不會在應用啓動時旋轉到橫向

根據其他帖子的建議,我驗證了我的Info.plist設置支持的界面方向和初始界面方向。我忽略了我的每個視圖控制器的shouldAutorotateToInterfaceOrientation方法返回YES僅適用於橫向方向。此外,我關閉了視圖的自動調整大小,因爲我不希望視圖的大小/方向發生改變。

基於此鏈接中的想法[1],我懷疑問題是視圖在啓動時沒有接收到改變方向的調用,可能是由於刪除了MainWindow.xib概念,這似乎是由以下的Xcode插入代碼中AppDelegate.m取代:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

我修改該方法,以產生從中我的ViewController類呈現的通用根視圖控制器,如示於以下的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    ViewController* myViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil]; 
    self.viewController = [[UIViewController alloc] init]; 
    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    [self.viewController presentModalViewController:myViewController animated:NO]; 
    return YES; 
} 

瞧!這解決了我的問題。然而,對我而言,這感覺就像是基本層面的變化,在我的發展過程中,我不想在這一點上做出改變。我打算成爲我的根視圖控制器現在是一種模態視圖。有沒有人有這個問題的另一個解決方案?

在此先感謝!

回答

4

我有這個相同的問題:一個應用程序,本來是在景觀假設ViewController始終在肖像。我對項目和info.plist的每個方面都做了大量的改變,包括給主UIWindow一個橫向的根視圖控制器。它仍然沒有工作。我終於解開所有的變化,只是增加了兩行下面我的應用程序代表指出:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    [_window addSubview:[_viewController view]]; 
    glView = _viewController.glView; 

    // THIS FIXED ORIENTATION FOR ME IN IOS 6 
    _window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 
    // END 

    ...my other setup code here... 
} 

沒有別的是必要的。

看起來,出於某種原因,在iOS 6中,UIWindow根視圖控制器設置有時會在Interface Builder中被忽略。我確信我的推理在某個地方是錯誤的,但我認爲這可能有助於促使某人朝着更全面,更詳盡的答案行事。

0

在iOS 8中,UIScreen的設置窗口框架也是必需的,因爲它不會自動更新。

self.window.frame = [UIScreen mainScreen].bounds;