UINavigationController как дочерний элемент UINavigationController
Я не знаю, объясняет ли название сам вопрос, но вот оно...
У меня есть UINavigationController, который является parentViewController UINavigationController. Дело в том, что childViewController ведет себя странно, когда я добавляю его в качестве дочернего, он сначала имеет пробел для statusBar (он не занимает весь экран), и если я "решаю" эту "ошибку", скрывая и показывая навигационную панель, разрыв пропадает, но теперь ребенок не уважает кадр, который я установил вручную. Затем я попытался продолжить, и когда я представил модал на ребенка и отклонил его, весь ребенок ушел...
Что там будет не так? Родительско-дочерние отношения с обоими контейнерами или как?
Спасибо за совет
РЕДАКТИРОВАТЬ: Вот пример проекта, показывающий странное поведение
http://www.mediafire.com/?8saa68daqfkf335
РЕДАКТИРОВАТЬ 2: Я нашел решение на самом деле, и я не нашел его действительно ясным на Apple Docs, он говорит, что childViewControllers берет свой кадр из parentViewController, к которому они принадлежат, но это не говорит, что если parentViewController "появляется снова" (например, что-то вроде этого) childViewControllers снова изменяет размер с помощью фрейма parentViewController... Надеюсь, это кому-нибудь поможет
1 ответ
Я считаю, что было бы лучше представить второй контроллер вида навигации в качестве контроллера модального вида. Например, замените ваш текущий селектор 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).
Конечно, все создание контроллера навигации будет происходить из селектора ViewDontLoad ViewController.m:
- (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];
}
Надеюсь, что это работает!