Скрываем UINavigationBar при прокручивании таблицы

В этой статье я расскажу, как скрывать  UINavigationBar в контроллере, в котором есть таблица UITableView при скроллинге или прокручивании таблицы вниз и возвращать его при скроллинге вверх.

На самом деле раньше я решал данную задачу с помощью делегата UIScrollView, вычисляя куда и как сильно скроллится таблица. Но есть куда более простой способ скрыть и показать UINavigationBar при скроллинге таблицы.

Я в качестве примера использовал проект из предыдущей статьи, в которой мы делали ячейки с автоматическим размером под содержимое. Нужно  обернуть (Editor -> Embed In -> Navigation Controller) контроллер с таблицей в UINavigationController.   Но способ, который я опишу ниже будет работать с любым UINavigationBar / UINavigationController.

Необходимо добавить метод жизненнго цикла ViewController viewWillAppear()

Через опциональное свойство контролера navigationController? мы обращаемся к свойству бара — hidesBarsOnSwipe и устанавливаем в него значение  true. Про другие полезные свойства UIViewController написано тут.

Результатом этих изменений станет анимация нашего UINavigationBar:

UINavigationBar_hide_1_proSwift_ru

 

Обратите внимание на 2 вещи!

  1. UINavigationBar является единственным для всего стека контроллера, которые в нем отображаются. Поэтому если в каком либо из контроллеров, которые будут отображены в дальнейшем этот бар нужен (на нем обычно расположены кнопки действий — такие как назад или добавить и.т.п.), а он будет скрыт при начале перехода — то произойдет пичалька…
    Решается проблема очень просто. В контроллере, который в любом случае должен отображать UINavigationBar в методе жизненного цикла viewWillAppear() нужно установить следующие свойства:

    Опять таки обращаемся к UINavigationController, который содержит наш контроллер, отменяем ему возможность прятаться по свайпу, и методом setNavigationBarHidden(false, animated: true) заставляем его появится на экране не зависимо от того скрыт он был или нет.
  2. Возможнозностей скрывать UINavigationBar по какому либо событию достаточно много. Apple любезно предоставила нам такую возможность. Посмотрите в документации свойства, хотя из названий этих свойств и так все понятно.

     


Ссылка проекта на GitHub

https://github.com/Ironrnd/UITableViewAutomaticDimension

 

 

Метки:
2 комментария на “Скрываем UINavigationBar при прокручивании таблицы
  1. Андрей:

    Как скрыть понятно и за это спасибо, но как его вернуть красиво назад при прокрутке вверх?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*