2012-10-28 76 views
1

我的應用程序主要使用導航控制器堆棧,有時會以模態方式顯示一些控制器。在橫向模式下,導航控制器堆棧中的控制器工作正常,但presentViewController或之前的presentModalViewController顯示的其他視圖控制器始終提供縱向尺寸視圖框架(在iPad iOS 6.0上始終爲768x1024) - 即使在縱向和橫向之間來回旋轉也是如此。導航控制器堆疊在橫向模式下,但模態顯示視圖控制器視圖總是以縱向框架大小

A view controller is in landscape mode, but I'm getting the frame from portrait mode?相關的種類但是檢查的答案沒有幫助。如果我將後面的視圖控制器添加爲導航堆棧的一部分,則第一次加載和後續旋轉時發生的大小調整將起作用。如上所述,當通過presentViewController添加控制器時,問題僅出現。

回答

3

將模態分支包裹到另一個導航控制器並在那裏定義旋轉遮罩。 在iOS6中- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)只適用於導航棧分支,整個分支應該以相同的方式工作。

所以,子類導航:

@interface CLNotRotatingNavController : UINavigationController 

,並在其.M添加此

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

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL) automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers { 
    return YES; 
} 

和包裝所有的模式轉移到這個導航。這將在必要時將所有內容鎖定到lanscape。

+0

太好了。有用。我添加了模式控制器(我只有一個)作爲CLNotRotatingNavController的根控制器(我實際上允許爲iPad旋轉,但只有肖像用於iPhone,因爲我有一個通用應用程序)並使用presentViewController顯示它。關閉dismissViewControllerAnimated。很好的解決方法。但是讓你想知道如果我們從一開始就做錯了什麼,或者如果這是iOS的錯誤(特徵)?我記得兩年前提交了一個類似bug的bug - 一年後,蘋果迴應說他們修復了這個bug。 :-P – Jonny

+0

他們稱之爲功能,這不是一個錯誤,因爲他們故意這樣做(甚至記錄在案),但我找不到任何理由證明這一舉動。我花了兩天才弄明白。 :/ – whiteagle

+0

@whiteagle:這顯示錯誤,請給一些代碼來顯示模型viewcontroller在customNavigation控制器 – TamilKing

相關問題