Подтвердить что ты не робот

UICollectionVIew: как я могу удалить пространство в верхней строке первой ячейки

У меня такая компоновка в Interface Builder, все свойства установлены на ноль.

enter image description here

Однако, когда я запускаю его как на устройстве, так и на симуляторе, он выглядит следующим образом

enter image description here

Где находится пространство над ячейками?

Поэтому я пытаюсь установить эти свойства для UICollectionViewFlowLayout в коде, подобном этому

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.headerReferenceSize = CGSizeZero;
    layout.footerReferenceSize = CGSizeZero;
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
    layout.minimumInteritemSpacing = 0;
    layout.minimumLineSpacing = 0;
    layout.itemSize = CGSizeMake(103, 119);

    self.calendarView.collectionViewLayout = layout;

но мне не повезло.

Как я могу избавиться от этого пространства? Спасибо.

4b9b3361

Ответ 1

UICollectionView является потомком класса UIScrollView, у которого есть свойство contentInset, установка -20 верхняя вставка исправляет проблему

[self.calendarView setContentInset:UIEdgeInsetsMake(-20, 0, 0, 0)];

Однако проблема возникает из свойства UIViewController automaticallyAdjustsScrollViewInsets. По документации:

Значение по умолчанию - YES, что позволяет контроллеру просмотра настраивать свои вставки прокрутки в ответ на области экрана, используемые в строке состояния, панели навигации, панели инструментов или панели вкладок. Установите значение НЕТ, если вы хотите самостоятельно управлять настройками вставки прокрутки.

Вот почему мы получаем настроенные вставки содержимого для строки состояния. Лучше отключить автоматическую настройку, чем заданное вручную значение, которое не соответствует изображению результата.

[self setAutomaticallyAdjustsScrollViewInsets:NO];

Ответ 2

Другим способом является выбор ViewController и снимите флажок Настроить прокрутки в в построителе интерфейса:

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

Это по существу то же самое, что и следующая строка кода. Но вы должны сразу увидеть ваши изменения в построителе интерфейса.

automaticallyAdjustsScrollViewInsets = false

Ответ 3

Вот быстрый ответ с несколькими настройками:

У меня есть представление коллекции, которое занимает небольшую часть представления. Я использовал:

self.automaticallyAdjustsScrollViewInsets = false

чтобы удалить верхний интервал, который испортил мой макет. Этот код не работал у меня:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)

И ни один из них:

self.paperCollectionView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)

Но это может быть потому, что я не использую UICollectionViewController, я просто использую UICollectionView.

Здесь большая часть кода, чтобы дать больше контекста: введите описание изображения здесь

Ответ 4

Вы также можете выбрать

[self.calendarView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
[self setAutomaticallyAdjustsScrollViewInsets:NO];

По умолчанию в представлении коллекции добавлено пространство прокрутки заголовка коллекции, и вам не нужно добавлять -20 сверху, потому что это может отразиться на проблеме устройства.

Ответ 5

Свифт 3:

self.automaticallyAdjustsScrollViewInsets = false

Ответ 6

Этот ответ странный, но он работает, если вы работаете в Interface Builder и имеете представление коллекции, встроенное в контроллер просмотра, который находится под управлением контроллера панели вкладок, который является контроллером корневого представления контроллера навигации.

  • Добавить панель инструментов в контроллер просмотра с представлением коллекции
  • Переместите панель инструментов в иерархии таким образом, чтобы она находилась над представлением коллекции

Если панель инструментов находится над представлением коллекции, не будет места от вершины прототипа Collection View Cell до коллекции. Если панель инструментов отсутствует или панель инструментов находится под представлением коллекции, тогда между верхней частью коллекции и ячейкой просмотра коллекции будет пространство. Это верно как в предварительном просмотре Storyboard, так и при запуске приложения. То же самое происходит в представлениях таблиц.

Это было самое последнее тестирование с Xcode Version 8.3.3 Элементы просмотра коллекции и зависимость панели инструментов

Ответ 7

Это можно сделать в Интерфейсном Разработчике, перейдя в раздел "Вид прокрутки" и изменив раскрывающийся список "Вставки содержимого" на "Никогда".

UICollectionView ScrollView ContentInset Never

Ответ 8

В iOS 11 не рекомендуется использовать automaticallyAdjustsScrollViewInsets, поэтому рекомендуется использовать collectionView.contentInsetAdjustmentBehavior = .never.