2013-01-08 51 views
2

我正在爲我的視圖添加子視圖。一切正常。我的應用程序支持自動旋轉。 當我旋轉我的設備時,我的父視圖shouldautorotate/willanimate被調用,但子視圖shouldautorotate/willanimate沒有被調用。正因爲如此,我無法設置子視圖的UI組件的位置。子視圖不能在設備旋轉上調整

viewController = [[abcController alloc] initWithNibName:@"abcController" bundle:nil]; 
[self.view addSubview:viewController.view]; 

任何指針都會有幫助。

回答

1

你的觀點缺乏正確的自動調整大小設置:

viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
從這個

除此之外,如果你的意思是,你的abcControllershouldautorotate/willanimate沒有得到所謂的,嗯,這是正常的行爲。

您的主控制器應執行某種遏制邏輯並將shouldautorotate/willanimate轉發給您的控制器。也就是說,您的主控制器可以在您的abcController實例上調用shouldautorotate/willanimate,但它應該知道它。另外,蘋果公司並不建議這樣做,但如果你想支持iOS4,這是唯一的方法。

或者,您可以對iOS> 5使用UIViewController Containment

這訴諸使用兩種方法:

@interface UIViewController (UIContainerViewControllerProtectedMethods) 

- (void)addChildViewController:(UIViewController *)childController; 
- (void)removeFromParentViewController; 

@end 

Here你可以找到一個很好的教程。這不適用於iOS4。

3

這是因爲您無法將視圖從一個視圖控制器添加到另一個視圖控制器的視圖樹中,並期望第二個視圖控制器獲取消息。

你需要或者

  1. 有你的加入是你的第一個UIViewController(不是第二UIViewController
  2. 使用addChildViewController方法的一部分第二種觀點控制器添加爲第一個孩子的觀點視圖控制器(這將允許這些消息被轉發)。
+0

感謝您的支持!我花了一天的時間試圖找出爲什麼我的子視圖不會旋轉。你必須調用addChildViewController! –

0

爲了讓視圖控制器接收shouldautorotate/willanimate調用,您需要它在「視圖層次結構」中。因此,如果只是將其視圖添加爲子視圖,則不會調用這些方法,但如果將此視圖控制器推入導航控制器或將其呈現爲模式視圖控制器或使用addChildViewController方法(適用於iOS 5+),則視圖控制器將收到這些消息。如果您只是想將其視圖添加爲子視圖,則可以使用autoresizingMask。 (但後來我只是沒有看到創建視圖控制器而不是自定義視圖)