2013-01-08 31 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。 (但后来我只是没有看到创建视图控制器而不是自定义视图)