Встраивание представления «Коллекция» в представление «Контейнер» — дополнительные пробелы вверху

У меня есть приложение, которое использует Nav Contoller в качестве начального VC, который затем имеет корневой UIViewContoller, содержащий UIView в верхней половине и UIContainerView внизу. В UIContanerView я встраиваю работающий UICollectionView, который содержит кнопки изображений, которые переходят к детальным представлениям.

Проблема в том, что в верхней части UICollectionView теперь отображается пустое пространство. Учитывая, что высота составляет около 64 пикселей, кажется, что это дублирование панели навигации 44 пикселя + строки состояния 20 пикселей = 64.

Дополнительное пространство около  64px в моем UICollectionView (я установил его серым)

И если я прокручиваю вверх, все выглядит нормально и работает, как и ожидалось, и это также позволяет мне показать вам, как я ожидал, что макет будет выглядеть при запуске:

Что я ожидал от  запустить макет, чтобы он выглядел как

Фрагмент моей раскадровки ниже, если это поможет:

Раскадровка< /а>


person Dan Coughlin    schedule 02.04.2016    source источник
comment
Прошло некоторое время с тех пор, как у меня была эта проблема, и я точно не помню разрешение :-(. IIRC Проблема в том, что представление контейнера находится внутри представления навигации, и операционная система пытается быть очень полезной, перемещая содержимое вниз по высоте навигационного представления. Если я правильно помню, вы можете проверить, что представление контейнера layoutMargins. Я думаю, вы найдете набор верхних полей, и вы можете попытаться очистить это.   -  person Scott Thompson    schedule 02.04.2016
comment
проверьте это... stackoverflow.com/questions/23786198/   -  person EI Captain v2.0    schedule 02.04.2016
comment
Спасибо, позвольте мне ответить одной строкой: automaticallyAdjustsScrollViewInsets = false   -  person Dan Coughlin    schedule 02.04.2016


Ответы (1)


да, это может быть связано с тем, что контроллер дочернего представления, встроенный в представление контейнера, создает впечатление, что он является прямым дочерним элементом UINavigationController, что, в свою очередь, заставляет collectionView оставлять верхние вставки 64 pt.

ЧТОБЫ решить эту проблему, в построителе интерфейса вашего дочернего контроллера снимите отметку с настройки вставок scrollView.

В конструкторе интерфейса вашего дочернего контроллера снимите отметку с настройки вставок scrollView

Это должно решить вашу проблему

ОБНОВЛЕНИЕ

Как предложил Дэн, мы также можем исправить это программно, вызвав

automaticallyAdjustsScrollViewInsets = false

в viewDidLoad() вашего UIViewController

person gunjot singh    schedule 02.04.2016
comment
Вот и все, и он соответствует ответу, который я нашел по ссылке @Scott Thompson, опубликованной выше. На самом деле я поместил одну строку в viewDidLoad(), чтобы она была менее скрыта, когда я вернусь через несколько месяцев... ;o) automaticallyAdjustsScrollViewInsets = false - person Dan Coughlin; 02.04.2016
comment
Похоже, что и контроллер контейнера, и дочерний контроллер должны быть сняты, чтобы он работал. - person Terence; 07.03.2017
comment
Он нужен только для того контроллера, который содержит в себе scrollView! - person gunjot singh; 07.03.2017