Представление модального вида иногда скрывает панель навигации - PullRequest
18 голосов
/ 04 июня 2009

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

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

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

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

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

[self.navigationController setNavigationBarHidden:NO];

к моему сердцу, везде, где я могу думать без эффекта.

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

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

Ответы [ 4 ]

38 голосов
/ 04 июня 2009

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

нравится:

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

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

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

2 голосов
/ 22 марта 2012

@ HeatMiser показывает отличный способ обойти «ошибку», связанную с невозможностью отображать элементы на панели навигации. Однако я не уверен, является ли это просто ошибкой в ​​Presentation, поскольку модальные операции должны превосходить тему интерфейса базового представления. Иметь тему модальной операции, имитирующую лежащую в основе тему пользовательского интерфейса, - это хорошо, но оборачивать истинное модальное представление навигационным представлением мне нехорошо (дополнительный объект просмотра просто для получения немного большего поведения).

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

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

1 голос
/ 13 апреля 2013

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

[self.navigationController pushViewControllerAnimated: how];

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

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

1 голос
/ 04 августа 2010

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

[parentController dismissModalViewControllerAnimated: YES];

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

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