2012-04-13 64 views
2

我有我的MainViewController這個方法:模式的看法防止其他視圖旋轉

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    NSLog(@"MAIN CONTAINER WILL ANIMATE"); 
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
} 

當我旋轉的的NSLog顯示了,一切都是完美的。但是,如果我從我的MainViewController提供一個modalViewController,然後旋轉,NSLog不再出現,並且我的MainViewController永遠不會知道該設備已旋轉,所以當modalView被解散時,該接口不會進行旋轉調整。

任何想法爲什麼模態視圖可以防止父母接收輪換更新?這是典型的,還是必須有我的設置有問題?

只是爲了確保,我試着通過[mainViewController.view addSubview:modalView.view]將modalViewController作爲子視圖呈現,並且旋轉更新正常生效。只有當我執行[mainViewController presentModalViewController:modalViewController];時,更新纔會生效。

+0

我不知道爲什麼莫代爾視圖控制器阻止這種方法調用,我自己也對這個問題感到沮喪!所以恐怕我不知道爲什麼不這樣做,但我知道如何解決這個問題。 我假設你的代碼中的某處,你使用[self.view presentModalViewController:viewController]行? 而不是這樣做,只需做[self.view addSubview:viewController.view](我認爲它這樣,沒有在我面前的代碼) 基本上,而不是以模態方式呈現它只是將其視圖添加到當前視圖所有的意志/做/旋轉方法現在應該被調用! – 2012-04-13 13:36:02

+0

而不是什麼..檢查出我的更新..也許這就是你得到它。但我不希望它成爲一個子視圖..我想得到這個工作作爲一種模態觀點.. – Snowman 2012-04-13 13:37:40

+0

對不起...觸發快樂輸入鍵! :D現在編輯! – 2012-04-13 13:38:32

回答

4

當然,當視圖控制器以模態方式呈現時,其他視圖控制器根本不會收到任何消息。在這種情況下,這就是情態意味着什麼。

顯而易見的解決方案是檢查無模式視圖控制器的viewWillAppear方法中的方向。

+0

然後在viewWillAppear中,我必須自定義設置所有內容的大小,因爲視圖仍然認爲它的寬度是320,並且autoResizing不會發生。如何在不手動設置框架尺寸的情況下自動將所有內容調整爲新的視圖寬度? – Snowman 2012-04-13 13:54:41

+0

你可以嘗試設置你的主視圖的autoresizesSubviews屬性。這可能有幫助。 – 2012-04-13 14:00:55

+0

在iOS 6或更高版本中,請在viewDidLayoutSubviews中執行此操作。在viewWillAppear中,視圖的維度還沒有被更新。 – 2014-01-14 23:55:47

1

你必須檢查的實施:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Overriden to allow any orientation. 
    return YES; 
} 

在這兩種意見。

+0

是的,這已經在兩個視圖中完成.. – Snowman 2012-04-13 13:39:06

+0

你又回來了什麼模態視圖? – LuisEspinoza 2012-04-13 13:44:55

0

您需要在viewWillAppear中將佈局調整爲當前界面方向。很明顯,因爲視圖不可見,所以在模態視圖控制器啓動時不會調用動畫功能。