そのため、UIViewController内側に aUIViewControllerと内側に a がUIViewControllerあり、そのフレームを調整しようとしています。ただし、 を呼び出すと、フレームを調整しようとしている特定のビュー コントローラーの がsetFrame:呼び出されます。viewDidLoadただし、その時点でframeSizeは、私が設定したものではありません。ここviewDidLoadでは、 というプライベート メソッドも呼び出しています。このメソッドはloadDataFromServer、最初にメモリからデータを取得し、次にサーバーを呼び出します。メモリからデータをロードしているため、基本的にはviewDidLoadが終了する前に非常に迅速に実行されるため、フレームサイズはまだ調整されていません. したがって、最初に間違ったサイズ/レイアウトのビューが表示され、サーバーからデータを取得した後に調整されます。この時点viewDidLoadで終了し、フレームが適切に調整されます。
loadDataFromServerコールを次に移動するとviewDidAppear、すべて問題ないように見えます。問題は、いつ呼び出されるかわからないということですviewDidAppear。それは一度呼び出されviewDidLoadますか?それとも後に呼び出されviewWillAppearますか?これに対するアイデア/回避策はありますか?
ContainerViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ContainerViewController"];
vc.delegate = self;
UINavigationController *newsfeedNavController = [[UINavigationController alloc] initWithRootViewController:vc];
[self addChildViewController:newsfeedNavController];
newsfeedNavController.view.frame = CGRectMake(0, 0, self.view.frameWidth, self.view.frameHeight);
[self.view addSubview:newsfeedNavController.view];
[newsfeedNavController didMoveToParentViewController:self];
[newsfeedNavController release];