Представление модального вида иногда скрывает навигационную панель
Я уже сталкивался с этим дважды.
Иногда используется следующая строка кода:
[self.navigationController presentModalViewController:aViewController animated:YES];
отображает представление, но панель навигации затем скрыта.
Я могу написать:
[self.navigationController setNavigationBarHidden:NO];
для моего сердца, везде, о котором я могу думать без последствий.
Кто-нибудь сталкивался с этим?
Я делаю что-то глупое?
Ответы
Ответ 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];
чтобы сместить другой контроллер представления, предоставив себя и пользователю в последовательный пользовательский интерфейс в комплекте с поддержкой "автоматической" обратной кнопки.
Как только навигационный контроллер используется, представление модального контроллера может быть сделано только для увеличения полезной области на экране. И тогда вы действительно должны использовать причудливую анимацию, чтобы пользователь знал, что вы отступаете от "задачи" или "шагов", которые воплощал навигационный контроллер.