[英]Swift UIcollectionViewcell grid layout subView on device rotation not updating correctly (programmatically)
[英]SubView not adjusting on device rotation
我要在视图中添加子视图。 一切正常。 我的应用程序支持自动旋转。 当我旋转设备时,我的父视图应该自动旋转/将被调用,但是子视图应该自动旋转/将不被调用。 因此,我无法设置子视图的UI组件的位置。
viewController = [[abcController alloc] initWithNibName:@"abcController" bundle:nil];
[self.view addSubview:viewController.view];
任何指针都会有所帮助。
这是因为您无法在功能上将一个视图控制器中的视图添加到另一视图控制器的视图树中,并希望第二个视图控制器获取消息。
你需要
UIViewController
一部分(而不是第二个UIViewController
) addChildViewController
方法将第二个视图控制器添加为第一个视图控制器的子代(这将允许转发这些消息)。 您的视图缺少正确的自动调整大小设置:
viewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
除此之外,如果您的意思是没有调用abcController
的shouldautorotate/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.