2

プロジェクトの 1 つで UIViewController コンテインメント機能を使用しようとしています。アプリは横向きモードでのみ使用することを意図しています。

UIViewController Aを UIViewController Bの子として追加し、Aのメイン ビューをBのビューの 1 つのサブビューとして追加します。A への参照も B に保存しています。

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

ここで何か不足していますか?

4

1 に答える 1

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:ビューの外観の設定が完了するまで待つという提案に注意してください。ここで説明しているのと同じ問題に直面している可能性があると思います。

于 2012-09-05T17:33:37.073 に答える