Как изменить размер представления при использовании UINavigationController setToolbarHidden: animated: - PullRequest
4 голосов
/ 25 января 2011

Я использую панель инструментов UINavigationController.Перед тем, как отобразить его, я изменяю размеры своих видов, чтобы они не блокировались панелью инструментов (я устанавливаю рамку вида текущего контроллера представления в прямоугольную область от нижней части navigationBar до верхней части toolbar.

Но не все мои контроллеры вида имеют toolbarItems. Поэтому при переключении с контроллера вида, у которого есть элементы (контроллер A), на контроллер, у которого нет (контроллер B), я хочу скрытьпанель инструментов. Однако, когда я вызываю setToolbarHidden:animated: в методе B's viewWillAppear:animated:, панель инструментов анимируется вниз во время push-перехода и показывает фон UIWindow позади него.

Это также происходит в обратном направлении:при переходе от B к A (с помощью кнопки «назад») я хочу, чтобы панель инструментов анимировалась, чтобы снова показать toolbarItems A, но поскольку вид A не распространяется на нижнюю часть экрана, UIWindow виден во времявсплывающий переход.

Возможно, это не самое лучшее описание, поэтому вот скриншот:

Cmd-shift-3 rapid-fire FTW

Я попытался обновить кадр А в его viewWillDisappear:animated:метод, но он делает странные вещи, так как он, кажется, вызывается в блоке push-анимации UINavigationController.Любое понимание будет оценено.

Обновление : вместо этого я пытался скрыть панель инструментов в B viewDidAppear:animated:, но результаты не были идеальными.При использовании этого решения панель инструментов не закрывается, пока не завершится push-переход.Поскольку B не имеет toolbarItems, элементы A сдвигаются влево во время перехода, оставляя пустую панель инструментов на экране, прежде чем она исчезнет.Кроме того, при возврате к A фон UIWindow будет виден, если я не установлю панель инструментов на видимость в B viewWillDisappear:animated:, что будет означать, что B должен знать, что A имеет toolbarItems.

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

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

UIEdgeInsets edgeInsets = [[self tableView] contentInset];
if (![[self navigationController] isToolbarHidden]) {
    edgeInsets.bottom = CGRectGetHeight([[[self navigationController] toolbar] frame]);
}
[[self tableView] setContentInset:edgeInsets];
0 голосов
/ 25 января 2011

Возможно, лучше всего было бы вызвать setToolbarHidden:animated: в B viewDidAppear?

Или вы можете изменить кадр A, прежде чем нажать B на навигационный контроллер в pushViewController:animated: методе в пользовательском UINavigationControllerподкласс.

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