Добавляя второй дочерний контроллер представления с помощью NSLayoutContraints, всегда размещайте его под панелью навигации, а не после панели навигации.

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

  • Я создал пример демонстрационного проекта, чтобы продемонстрировать проблему. Требование довольно простое (также прилагаются скриншоты). Приложение начинается с ViewController, который является UINavigationController, поэтому он показывает NavigationBar.
  • В UINavigationBar добавлен UISegmentController из 2 элементов.
  • Есть 2 дочерних TableViewController, которые будут отображаться для каждого выбора сегмента.
  • Каждый ViewController добавляется с помощью NSLayoutConstraints. И каждый раз более старый дочерний VC будет удаляться, а новый будет добавляться вместо того, чтобы скрывать и показывать. Хотя мы не создаем объект VC каждый раз. Он имеет сильную ссылку
  • Дочерние VC добавляются в представление RootVC вместо ContainerView. Пробовал также ContainerView, но результат тот же.

Теперь проблема в том, что второй дочерний VC всегда находится под панелью навигации (см. прикрепленный снимок экрана). Но с первым все в порядке, так как он находится под панелью навигации. если я установлю для полупрозрачного свойства NavigationBar значение «НЕТ», оба будут работать нормально, как и ожидалось. Но с полупрозрачным свойством NavigationBar как «ДА» правильно будет уложен только первый, а не второй. Неважно, какой ChildViewController (firstVC или secondVC), это происходит для дочернего VC, добавленного после первого. Любые идеи по этой странной проблеме? Я создал демонстрационный проект, если хотите проверить что там происходит..

Заранее спасибо..

Первый виртуальный инвестор Второй виртуальный капитал


person Hadhi    schedule 03.03.2017    source источник
comment
Почему бы вам не добавить один UIView в rootVC и добавить представление контроллеров просмотра в свой UIView. Я имею в виду использование представления контейнера   -  person karthikeyan    schedule 03.03.2017
comment
cocoacasts.com/   -  person karthikeyan    schedule 03.03.2017
comment
Привет @karthikeyan, спасибо за ваш ответ. Я также использовал ContainerView и упомянул то же самое в посте. Но все же проблема существует. И я повторяю, что если полупрозрачное свойство NavigationBar установлено в NO, все работает нормально.   -  person Hadhi    schedule 03.03.2017
comment
Он отлично работает с представлением контейнера. Вам нужно отключить AutomaticAdjustsScrollViewInsets   -  person karthikeyan    schedule 03.03.2017
comment
github.com/karthisiva/TestChileVC   -  person karthikeyan    schedule 03.03.2017
comment
Да!!!.. Это решает проблему.. Итак, с ContainerView и автоматическим отключением AdjustsScrollViewInsets все работает нормально.. Большое спасибо..   -  person Hadhi    schedule 03.03.2017


Ответы (2)


Вы отключили опцию : Auto adjust scrolls inset ? он глючит и применяется только к первому прокрутке вашего контроллера просмотра

person CZ54    schedule 03.03.2017
comment
Да!!!.. Это решает проблему.. Итак, с ContainerView и автоматическим отключением AdjustsScrollViewInsets все работает нормально.. Большое спасибо.. - person Hadhi; 03.03.2017

Если вы хотите переместить прокрутку ниже панели навигации,

Установите свойство viewControllers self.automaticallyAdjustsScrollViewInsets = false;

person Bikshapathi Kumbala    schedule 03.03.2017