0

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
}

私はこれをすべて間違っていますか?

4

0 に答える 0