UINavigationController にはいくつかの子ビュー コントローラーがあり、そのうちのいくつかはコンテナー コントローラーです。最後に追加された子 UIViewController (緑の背景) の UIView フレーム レイアウトには、親の背景 (黄色) があってはならない場合があります。
すべてのビューが奇妙なオフセットなしでナビゲーション バーの下の画面の境界内に収まるように、すべてをレイアウトするにはどうすればよいですか?
私のAppDelegateで開始されたUIViewController階層:
UINavigationController rootViewController:FrontFacadeViewController < UIViewController
view (0,0) dim:(320x460)
=> StandardCoverViewController < UIViewController
added as addSubview of FrontFacadeViewController's view]
view: (0,0) dim:(320x460)
=> ConfigurationViewController < UIViewController
added by pushing onto self.navigationController
view: (0,20) (320x460)
=> GearViewController < UIViewController
added as subview of ConfigurationViewController's view
view: (0,0) (320x416)
すべてのView Controllerを作成する方法は次のとおりです。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
FrontFacadeViewController *frontController = [[FrontFacadeViewController alloc]
initWithBundle:[NSBundle mainBundle]];
_appNavigationController = [[UINavigationController alloc]
initWithRootViewController:frontController];
}
FrontFacadeViewController:
// FrontFacadeViewController determines a particular view controller to present
// based on some business logic.
// Because of this, it adds child UIViewControllers using container controllers.
//
- (void)viewDidLoad {
StandardCoverViewController *controller = [StandardCoverViewController alloc] initWithNibName:nil bundle:self.nibBundle];
[self addChildViewController:controller];
[controller didMoveToParentViewController:self];
[self.view addSubview:controller.view];
[controller didMoveToParentViewController:self];
}
- (IBAction)onButtonPress {
ConfigurationViewController *controller = [[ConfigurationViewController alloc] initWithNibName:nil bundle:self.nibBundle];
[self.navigationController pushViewController:controller animated:YES];
}
ConfigurationViewController: (黄色の背景)
- (void)viewDidLoad {
[self.view setBackgroundColor:[UIColor yellowColor]];
GearViewController *controller = [[GearViewController alloc] initWithNibName:nil bundle:self.nibBundle];
[self addChildViewController:controller];
[self.view addSubview:controller.view];
[controller didMoveToParentViewController:self];
}
GearViewController: (緑の背景)
- (void)viewDidLoad {
[self.view setBackgroundColor:[UIColor greenColor]];
// nothing special
}
私はこれをすべて間違っていますか?