Добавление контроллера навигации в приложение на основе представления добавляет верхнее поле - PullRequest
0 голосов
/ 27 марта 2011

Я пытаюсь программно добавить контроллер навигации в мое приложение на основе View.Это код, который я использую (этот код вызывается после нажатия кнопки в контроллере представления):

MainMenu *control = [[MainMenu alloc] initWithNibName: @"MainMenu" bundle: nil];
UINavigationController *navControl = [[UINavigationController alloc] initWithRootViewController: control];
[self.view addSubview:navControl.view];
[control release];

Это работает, но в конечном итоге это происходит:

enter image description here

Обратите внимание на нечетное поле над элементом навигации .... Контроллер My View, к которому я добавляю контроллер навигации, имеет серый фон, который вы можете видеть.

Любые идеи ??

Если у вас есть более удобный способ добавления контроллера навигации в приложение View, я очень открыт для предложений!

Заранее спасибо!

Ответы [ 5 ]

2 голосов
/ 28 марта 2011

Спасибо вам обоим за ваш ответ, но, к сожалению, wantsFullScreenLayout, установленный на YES или NO в коде, не дал никакого эффекта.Мне удалось поднять Навигационный контроллер на 20 с использованием этой строки кода:

self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);

, но затем произошло то, что Контроллер просмотра не сдвинулся вверх с панели навигации и оставил пробел под навигациейПанель и контроллер просмотра.В конечном итоге сработало установление флажка Wants Full Screen в IB в контроллере представления MainWindow, который автоматически генерируется при настройке приложения на основе представления.

1 голос
/ 23 июля 2012

Так просто убрать этот пробел ..

self.navigationBar.view.frame = CGRectMake(0, -20, 320, 480);
1 голос
/ 21 марта 2012

Я боролся с этой же проблемой этим утром.Так как установка свойства wantsFullScreenLayout, похоже, не имеет никакого эффекта, я прибег к использованию небольшого подкласса, который работал нормально:

1 голос
/ 27 марта 2011

Скорее всего, вы хотите сделать UINavigationController корневым контроллером представления для окна, а не того контроллера представления, который у вас есть сейчас. Это был бы лучший способ сделать это.

Причина, по которой вы видите это дополнительное поле вверху, состоит в том, что UINavigationController обычно ожидает, что его размер будет заполнять весь экран (за исключением, возможно, панели вкладок внизу, если она находится внутри UITabBarController), и поэтому ожидает что верхний край его обзора будет находиться под строкой состояния, если строка состояния видна. Поэтому он размещает панель навигации на 20 пикселей ниже верхней части своего обзора, чтобы оставить место для строки состояния, не удосуживаясь проверить, действительно ли его вид равен под строкой состояния. Интересно, что иногда операция повторной компоновки будет выполнять эту проверку, но это ненадежно. То, что я нашел, хорошо работает в такой ситуации: установить для свойства wantsFullScreenLayout UINavigationController значение NO. Тогда я не пытаюсь оставить место для строки состояния, поэтому все работает как положено.

1 голос
/ 27 марта 2011

Зазор, который вы видите, равен высоте строки состояния.Проверьте настройки строки состояния в файле NIB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...