0

Я не знаю, если название объясняет сам вопрос, но здесь ...UINavigationController, как ребенок UINavigationController

У меня есть UINavigationController, который является parentViewController из UINavigationController. Дело в том, что childViewController ведет себя странно, когда я добавляю его в качестве дочернего, у него сначала есть пробел для statusBar (он не занимает весь экран), и если я «решаю» эту «ошибку», скрывая и отображая navigationBar, пробел уходит, но теперь ребенок не уважает рамку, которую я устанавливаю вручную. Затем я попытался продолжить, и когда я представил модальный ребенок и уволил его, весь ребенок уходит ...

Что там будет не так? Отношения родитель-ребенок с обоими контейнерами или что?

Спасибо советы

EDIT: Вот пример проекта, показывающий странное поведение

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

EDIT 2: Я нашел решение на самом деле, и я не считаю, это действительно ясно компании Apple Docs , он говорит, что childViewControllers берут свой фрейм из родительского контроля, к которому они принадлежат, но он не говорит, что если родительскийконтроллер «снова появляется» (например, нажатие на него), childViewControllers снова будут изменены снова с помощью рамки parentViewController ... Надеюсь, это поможет любой

+0

Возможно, вы можете предоставить скриншот (или два, ...) –

+0

Хорошо, дайте мне сек ... EDIT: Ну, я могу на самом деле опубликовать изображение пробела UINavigationController, являющегося дочерним, но другое поведение не может быть снято с экрана таким образом ... Позвольте мне приложить пример проекта, который показывает «ошибку» ... –

+0

Контейнер внутри контейнера, я думаю, что это не очень хороший подход, возможно, вам нужно попробовать собственный контроллер внутри родительский контроллер навигации ... PS chupili – D33pN16h7

ответ

0

Я считаю, что было бы лучше представить второй контроллер навигационного представления в качестве модального контроллера. Например, заменить текущий селектор 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).

Конечно, это заняло бы все создание навигационного контроллера от селектора viewDidLoad 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]; 
} 

Надеется, что это работает!

+0

Мне нужно, чтобы childViewController всегда был там, потому что у него есть UIPanGestureRecognizer, который позволяет вам переместить контроллер в верхнюю часть, чтобы представить его ... –

+0

Я согласен с D33pN16h7, UINavigationController внутри rootViewController другого UINavigationController не звучат как лучший подход. Возможно, вы можете сделать скриншоты второго навигационного контроллера для представления и использовать этот снимок экрана для скользящего движения, а затем, когда слайд закончен, вы можете представить свой дополнительный навигационный контроллер без анимации? Вы сохранили бы иллюзию, избегая вложенности UINavigationControllers. – Pablo

 Смежные вопросы

  • Нет связанных вопросов^_^