我在我的观点中添加了一个子视图。一切正常。我的应用程序支持自动旋转。 当我旋转我的设备时,我的父视图shouldautorotate / willanimate被调用但子视图shouldautorotate / willanimate没有被调用。因此,我无法设置子视图的UI组件的位置。
viewController = [[abcController alloc] initWithNibName:@"abcController" bundle:nil];
[self.view addSubview:viewController.view];
任何指针都会有所帮助。
答案 0 :(得分:3)
这是因为您无法在功能上将视图从一个视图控制器添加到另一个视图控制器的视图树中,并期望第二个视图控制器获取消息。
你需要
UIViewController
(不是第二个UIViewController
)addChildViewController
方法将第二个视图控制器添加为第一个视图控制器的子级(这将允许转发这些消息)。答案 1 :(得分:1)
您的观点缺少正确的自动调整大小设置:
viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
除此之外,如果您的意思是abcController
的{{1}}未被调用,那么这就是正常行为。
您的主控制器应实施某种包含逻辑并将shouldautorotate/willanimate
转发给您的控制器。即,您的主控制器可以在您的shouldautorotate/willanimate
实例上调用shouldautorotate/willanimate
,但之后它应该知道它。顺便说一句,Apple并不建议这样做,但如果你想支持iOS4,这是唯一的方法。
或者,您可以使用UIViewController Containment for iOS> 5.
这可以使用两种方法:
abcController
Here你可以找到一个很好的教程。这不适用于iOS4。
答案 2 :(得分:0)
为了让视图控制器接收shouldautorotate / willanimate调用,您需要它在“视图层次结构”中。因此,如果您只是将其视图添加为子视图,则不会调用这些方法,但如果将此视图控制器推入导航控制器或将其作为模态视图控制器或使用addChildViewController方法(适用于iOS 5+),则视图控制器将收到这些消息。如果您只想将其视图添加为子视图,则可以使用autoresizingMask。 (但后来我没有看到创建视图控制器的重点,而不仅仅是自定义视图)