我正在尝试在我的一个项目中使用UIViewController包含功能。该应用程序仅用于横向模式。
我将UIViewController A 添加为UIViewController B 的子项,并添加 A 的主视图作为其中一个的子视图B 的观点。我也在B中保存对A的引用:
@interface BViewController : UIViewController
@property (retain, nonatomic) AViewController *aVC;
@end
@implementation BViewController : UIViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.aVC = [self.storyBoard instantiateViewControllerWithIdentifier:@"A"];
[self addChildViewController:self.aVC];
[self.myContainerView addSubview:self.aVC.view];
}
@end
我遇到的问题是横向不被尊重。我做了一些调试并找到了一个解决方案,但我担心这并不理想,因为它更像是一个黑客攻击:
在B:
- (void)viewDidLoad
{
[super viewDidLoad];
self.aVC = [self.storyBoard instantiateViewControllerWithIdentifier:@"A"];
[self addChildViewController:self.aVC];
[self.myContainerView addSubview:self.aVC.view];
[self.aVC didMoveToParentViewController:self];
}
在A:
- (void)didMoveToParentViewController:(UIViewController *)parentVC
{
// Interchange width and height
self.view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.**height**, self.view.frame.size.**width**);
}
我在这里错过了什么吗?
答案 0 :(得分:6)
您的代码:
self.aVC = [self.storyBoard instantiateViewControllerWithIdentifier:@"A"];
[self addChildViewController:self.aVC];
[self.myContainerView addSubview:self.aVC.view];
总是错的。将父项添加到子控制器后,必须将didMoveToParentViewController:
发送给子控制器。请参阅我的讨论:
http://www.apeth.com/iOSBook/ch19.html#_container_view_controllers
至于轮换,很可能你太早做了这一切。该应用程序以纵向方式开始,并且在调用viewDidLoad
时尚未旋转到横向。我在这里给出了解决这个问题的方法:
http://www.apeth.com/iOSBook/ch19.html#_rotation
请注意那里的建议,等到didRotateFromInterfaceOrientation:
完成设置视图的外观。我想你可能会面临我在那里描述的相同问题。