Проблемы с TUITabBarController внутри UINavigationController

#ios #uitableview #uinavigationcontroller #uitabbarcontroller

#iOS #uitableview #uinavigationcontroller #uitabbarcontroller

Вопрос:

Я хочу добавить UITabBarController в качестве корневого представления моего контроллера UINavigation. Цель этого в том, что я хочу создать аналогичную навигацию в Facebook app: затем пользователь выбирает контакт на вкладке «Контакты» — просмотр с информацией о пользователе не имеет панели вкладок.

Итак, у меня есть навигационный контроллер, панель вкладок в качестве корневого представления или it и пара TableViewControllers внутри этого UITabBarController .

Раскадровка

У меня есть две основные проблемы с этим:

  1. Я не могу назначить заголовок для панели навигации для корневых представлений панели вкладок. Если я открою контактные данные, у меня появится заголовок панели навигации и нет панели вкладок (как я и хотел). Но если я выбираю Контакты или Избранное — эти представления имеют пустой заголовок панели навигации. Я пытался установить его на viewDidLoad и viewDidApper без какого-либо успеха
  2. Еще более серьезная проблема. Когда я нажимаю «Избранное», вставки в виде таблицы нарушаются. первая ячейка находится под панелью навигации. Первый загруженный tableview (в моем случае Contact) отображается правильно. Настройка вставок прокрутки выполняется YES для обоих tableViews.

Обновить:

Раскадровка решения (обратите внимание, что свойство «Скрыть нижнюю панель при нажатии» переключено на ДА).

введите описание изображения здесь

Комментарии:

1. Можете ли вы организовать их наоборот, где панель вкладок vc содержит vcs навигации? Это, безусловно, более распространенная схема.

2. Я хотел скрыть панель вкладок при нажатии, но Яануссим ответил, как это сделать

Ответ №1:

Я также боролся с проблемой UITabBarController UINavigationController. Когда UITabBarController содержался в UINavigationController, вставки содержимого вели себя действительно странно.

Я бы предложил использовать навигационные контроллеры внутри UITabBarController, и когда будет нажат следующий контроллер, установите для ‘hidesBottomBarWhenPushed’ на этом контроллере значение YES.

Это также решило бы проблему с настройкой заголовка панели навигации, поскольку навигационный контроллер ближе к контроллеру просмотра. Вы можете просто использовать self.navigationItem.

Если вы оставите это для текущей настройки — UITabController, содержащейся в UINavigationController, тогда вам необходимо изменить navigationItem на контроллерах TabBarController (self.TabBarController.navigationItem). Обратите внимание, что лучшим местом для этого было бы в view controllers ‘viewWillAppear’ для каждого контроллера, содержащегося в UITabBarController, поскольку они используют один элемент навигации.