0

タイトルが質問自体を説明しているかどうかはわかりませんが、ここにあります...

UINavigationControllerのparentViewControllerであるUINavigationControllerがあります。子として追加すると、最初にstatusBarのギャップがあり(画面全体を占めるわけではありません)、navigationBarを非表示にして表示することでその「バグ」を「解決」すると、childViewControllerの動作がおかしくなります。ギャップはなくなりますが、子供は私が手動で設定したフレームを尊重しなくなります。それから私は続けようとしました、そして私が子供にモーダルを提示してそれを却下すると、子供全体が去ります...

そこで何が悪いのでしょうか?両方のコンテナとの親子関係または何ですか?

アドバイスありがとう

編集:これは奇妙な振る舞いを示すサンプルプロジェクトです

http://www.mediafire.com/?8saa68daqfkf335

編集2:私は実際に解決策を見つけましたが、Apple Docsでそれが本当に明確であるとは思いませんでした、それは、childViewControllersがそれらが属するparentViewControllerからフレームを取得すると言いますが、parentViewControllerが「再表示」された場合(それをプッシュ)childViewControllersはparentViewControllerフレームによって再びサイズ変更されます...これが誰かに役立つことを願っています

4

1 に答える 1

0

2 番目のナビゲーション ビュー コントローラーをモーダル ビュー コントローラーとして表示する方がよいと思います。たとえば、現在の presentController セレクターを次のようなものに置き換えます。

- (void)presentController:(id)sender {

ChildViewController1 *cvc = [[ChildViewController1 alloc] initWithNibName:@"ChildViewController1" bundle:nil];
nc3 = [[UINavigationController alloc] initWithRootViewController:cvc];

nc3.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:nc3 animated:YES completion:nil];

UIBarButtonItem *i = [[UIBarButtonItem alloc] initWithTitle:@"X" style:UIBarButtonItemStyleBordered target:self action:@selector(close)];
cvc.navigationItem.leftBarButtonItem = i;
}

次に、閉じるセレクターは次のようになります。

- (void)close {
[nc3 dismissViewControllerAnimated:YES completion:nil];
}

(ただし、ボタンの作成を移動し、実際には ChildViewController1.m でクローズを処理することをお勧めします)。

もちろん、これにより、ViewController.m の viewDidLoad セレクターからナビゲーション コントローラーのすべての作成が行われます。

- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blueColor];

UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
b.frame = CGRectMake(0, 100, 100, 40);
[b setTitle:@"present" forState:UIControlStateNormal];
[b addTarget:self action:@selector(presentController:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:b];
}

それがうまくいくことを願っています!

于 2013-03-22T15:55:18.590 に答える