2

我正在尝试在我的一个项目中使用 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

我遇到的问题是横向没有得到尊重。我进行了一些调试并找到了解决方案,但我担心它并不理想,因为它更像是一种 hack:

在 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];
}

在一个:

- (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**);
}

我在这里错过了什么吗?

4

1 回答 1

6

你的代码:

self.aVC = [self.storyBoard instantiateViewControllerWithIdentifier:@"A"];
[self addChildViewController:self.aVC];
[self.myContainerView addSubview:self.aVC.view];

总是错的。didMoveToParentViewController:将其添加到父级后,您必须发送给子级控制器。在这里查看我的讨论:

http://www.aeth.com/iOSBook/ch19.html#_container_view_controllers

至于轮换,很可能你只是做得太早了。viewDidLoad该应用程序以纵向开始,并且在调用时尚未旋转到横向。我在这里给出这个问题的解决方案:

http://www.aeth.com/iOSBook/ch19.html#_rotation

请注意那里的建议,即您要等到didRotateFromInterfaceOrientation:完成设置视图的外观。我想你在这里可能会遇到我在那里描述的同样的问题。

于 2012-09-05T17:33:37.073 回答