繁体   English   中英

SubView无法调整设备旋转

[英]SubView not adjusting on device rotation

我要在视图中添加子视图。 一切正常。 我的应用程序支持自动旋转。 当我旋转设备时,我的父视图应该自动旋转/将被调用,但是子视图应该自动旋转/将不被调用。 因此,我无法设置子视图的UI组件的位置。

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

任何指针都会有所帮助。

这是因为您无法在功能上将一个视图控制器中的视图添加到另一视图控制器的视图树中,并希望第二个视图控制器获取消息。

你需要

  1. 让您添加的视图成为第一个UIViewController一部分(而不是第二个UIViewController
  2. 使用addChildViewController方法将第二个视图控制器添加为第一个视图控制器的子代(这将允许转发这些消息)。

您的视图缺少正确的自动调整大小设置:

viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

除此之外,如果您的意思是没有调用abcControllershouldautorotate/willanimate ,那是正常现象。

您的主控制器应实现某种包含逻辑,并将shouldautorotate/willanimate给您的控制器。 即,您的主控制器可以在abcController实例上调用shouldautorotate/willanimate ,但随后它应该知道它。 顺便说一句,Apple不建议这样做,但这是要支持iOS4的唯一方法。

另外,您可以使用iOS> 5的UIViewController Containment

这诉诸于使用两种方法:

@interface UIViewController (UIContainerViewControllerProtectedMethods)

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

@end

在这里您可以找到一个很好的教程。 在iOS4上将无法使用。

为了使视图控制器能够接收shouldautorotate / willanimate调用,您需要将其置于“视图层次结构”中。 因此,如果仅将其视图添加为子视图,则不会调用这些方法,但如果将此视图控制器推入导航控制器或将其作为模式视图控制器呈现,或使用addChildViewController方法(适用于iOS 5+),则为视图控制器将收到这些消息。 如果仅要将其视图添加为子视图,则可以使用autoresizingMask。 (但是然后我看不到创建视图控制器的意义,而不仅仅是自定义视图)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM