UICollectionView добавляет верхнюю границу

Я хочу поместить элемент управления UICollectionView, который показывает большие пальцы горизонтально (только одна строка больших пальцев). По какой-то причине UICollectionView нажимает большие пальцы на 44 пиксела, поэтому высота "0" на самом деле равна "44". Я предполагаю, что это могло бы добавить это пространство, чтобы рассмотреть высоту навигационной панели (я просто предполагаю). Поскольку мой UICollectionView находится только на части экрана, я не хочу этого поля. Есть ли способ удалить его?

Ответ 1

Проблема может быть в наборах содержимого коллекции. Попытайтесь добавить self.automaticallyAdjustsScrollViewInsets = NO; в метод контроллера viewDidLoad.

Ответ 2

Вы также можете установить это в раскадровке.

Убедитесь, что вы выбрали ViewController, а затем отключите "Настроить прокрутки".

enter image description here

Я не тестировал, что этот метод IB/Storyboard делает на iOS6. С помощью метода кода вам нужно проверить, отвечает ли VC методу:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}

Ответ 3

Я обнаружил, что добавление:

self.edgesForExtendedLayout = UIRectEdgeNone;

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

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

Хорошо стоит прочитать

Ответ 4

Возможно, вы можете попытаться заставить это значение равным 0, используя раскладку потока делегатов представления коллекции:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
    return UIEdgeInsetsMake(PADDING_TOP, PADDING_LEFT, PADDING_BOTTOM, PADDING_RIGHT);
}

Измените значение вашего дополнения.

Ответ 5

Swift 3:

Сначала вы хотите установить для viewControllers automaticallyAdjustsScrollViewInsets значение false:

self.automaticallyAdjustsScrollViewInsets = false

Затем вы должны соответствующим образом отрегулировать вставки кромок:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    //top, left, bottom, right
    return UIEdgeInsets(top: 10, left: 0, bottom: 0, right: 0)
}

Ответ 6

Как упоминали некоторые другие, viewController.automaticallyAdjustsScrollViewInsets устарела с iOS 11. Мое решение...

Swift 4.2, Xcode 10.1, iOS 12.1:

По какой-то причине collectionView.contentSize.height выглядел меньше разрешенной высоты моего представления коллекции. Во-первых, я использовал ограничение авторазметки относительно 1/2 высоты суперпредставления. Чтобы исправить это, я изменил ограничение на "безопасную область" представления.

Это позволило мне установить высоту ячейки для вертикального заполнения представления моей коллекции, используя collectionView.contentSize.height:

private func setCellSize() {
    let height: CGFloat = (collectionView.contentSize.height) / CGFloat(numberOfRows)
    let width: CGFloat = view.frame.width - CGFloat(horizontalCellMargin * 2)

    let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.itemSize = CGSize(width: width, height: height)
}

До

height relative to superview bad collection view layout

После

height relative to safe area good collection view layout

Ответ 7

Как и @Sviatoslav, вы можете попробовать следующее:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    yourCollectionView.contentOffset = CGPointMake(0, 0);
}