Подтвердить что ты не робот

Представление модального вида иногда скрывает навигационную панель

Я уже сталкивался с этим дважды.

Иногда используется следующая строка кода:

[self.navigationController presentModalViewController:aViewController animated:YES];

отображает представление, но панель навигации затем скрыта.

Я могу написать:

[self.navigationController setNavigationBarHidden:NO];

для моего сердца, везде, о котором я могу думать без последствий.

Кто-нибудь сталкивался с этим?

Я делаю что-то глупое?

4b9b3361

Ответ 1

Нет, я тоже столкнулся с этим. Проблема в том, что когда вы представляете контроллер модального представления с классом на основе UIViewController, он не расширяет навигационную панель вызывающего навигационного контроллера на модальную. Модальный вид охватывает весь экран. В результате я решил создать UINavigationController и навязать на нем класс, основанный на UIViewController, а затем представить экземплярModalViewController для экземпляра контроллера навигации.

like:

UIViewController *vc = [[UIViewController alloc] init];
UINavigationController *cntrol = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentModalViewController:cntrol animated:YES];
[cntrol release];

Это позволило мне открыть панель навигации вверху.

Я не уверен, что это поможет в вашем конкретном случае, единственное, что я хотел бы предложить, - это воспроизвести поведение модальности с помощью UIAnimation, которая останавливает 44px ниже верхней части телефона. Это позволит сохранить видимую панель навигации.

Ответ 2

@HeatMiser показывает отличный способ обойти "ошибку", связанную с неспособностью отображать элементы на панели навигации. Я не уверен, однако, если это строго ошибка в презентации, так как модальные операции должны превзойти тему интерфейса основного представления. Наличие темы модальной операции имитирует основную тему пользовательского интерфейса, но обертывание истинного модального представления с видом навигации кажется мне неправильным (дополнительный объект просмотра просто для того, чтобы немного поработать).

Вместо этого следующее работало для меня и давало то же поведение, что и "Новое сообщение" в программе "Почта" (на iPhone).

В IB поместите UIToolBar в верхней части модального экрана (имитируя навигационную панель) с помощью кнопок "Отмена" и "Сохранить" UIBarButtonItem и Элемент "Гибкая панель пространства" между ними, чтобы выровнять кнопки влево и вправо. Затем добавьте UILabel с центром над UIToolBar (шрифт Helvetica, Bold, Size 18, похоже, соответствует заголовку панели навигации). Подключите кнопки к IBAction на модальном UIViewController, и все готово.

Ответ 3

Возможно, это очевидно, но как только вы закончите с модальным видом и хотите его отпустить, вы должны сделать что-то подобное в своем модальном vc:

[parentController rejectModalViewControllerAnimated: YES];

Где parentController - ссылка на vc, откуда вы представляете модальное представление.

Ответ 4

Если активный контроллер навигации активен, вы должны просто использовать

[self.navigationController pushViewControllerAnimated: how];

чтобы сместить другой контроллер представления, предоставив себя и пользователю в последовательный пользовательский интерфейс в комплекте с поддержкой "автоматической" обратной кнопки.

Как только навигационный контроллер используется, представление модального контроллера может быть сделано только для увеличения полезной области на экране. И тогда вы действительно должны использовать причудливую анимацию, чтобы пользователь знал, что вы отступаете от "задачи" или "шагов", которые воплощал навигационный контроллер.