iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
「独自のコンテナViewController」に戻る。
サンプルコードはRetina 4inchは考慮していないので、試す場合は、以前の画面サイズで行って欲しい。画面と同じサイズのDefault.pngを用意する。その際、座標が分かりやすい図とする。そして、最初に表示するViewControllerの画面にも、Default.pngを貼付けて欲しい。そして、実行するとどうなるか?最初の画面が表示される際に、図が少し下がったように見えないか?
これは、親ビューコントローラのビューの座標の始点が、ステータスバー分だけ下がっているが、nibでの子ビューコントローラーのビューの座標が、ステータスバーを考慮して下げられているからだ。
なので、小ビューコントローラのビューの始点を原点にすれば、解決する。
@implementation CVCViewController
...
- (void)viewDidLoad
{
[super viewDidLoad];
/* 子ビューコントローラを取得 */
UIStoryboard *oneStoryboard = [UIStoryboard storyboardWithName:@"OneStoryboard" bundle:nil];
UIStoryboard *twoStoryboard = [UIStoryboard storyboardWithName:@"TwoStoryboard" bundle:nil];
OneViewController *oneViewController = [oneStoryboard instantiateInitialViewController];
TwoViewController *twoViewController = [twoStoryboard instantiateInitialViewController];
/* コンテナViewControllerの子ViewControllerに登録 */
[self addChildViewController:oneViewController];
[self addChildViewController:twoViewController];
oneViewController.cvcViewController = self;
twoViewController.cvcViewController = self;
/* 強制的に呼ぶ */
[oneViewController didMoveToParentViewController:self];
[twoViewController didMoveToParentViewController:self];
/* 最初の画面を設定 */
self.selectedViewController = [self.childViewControllers objectAtIndex:0];
CGRect frame = self.selectedViewController.view.frame;
frame.origin = CGPointMake(0.0, 0.0);
self.selectedViewController.view.frame = frame;
[self.view addSubview:self.selectedViewController.view];
}
...
@end
これで、少し悩んだ事があった。