UICollectionView додає верхнє поле


75

Я хочу поставити елемент керування UICollectionView, який показує великі пальці горизонтально (лише один рядок великих пальців). З якоїсь причини UICollectionView штовхає великі пальці на 44 пікселі вниз, тому висота "0" насправді становить "44". Я припускаю, що це може додавати цей простір для врахування висоти навігаційної панелі (я просто припускаю). Оскільки мій UICollectionView знаходиться лише на частині екрана, я не хочу цього поля. Чи є спосіб його видалити?


Відповіді:


195

Проблема може бути у вставках вмісту подання колекції. Спробуйте додати self.automaticallyAdjustsScrollViewInsets = NO;до виду viewDidLoadметод контролера .


3
Чудово працює. Дуже дивно, що ця справа не може бути розглянута на розкадруванні.
башан

10
Це найніміше, що я коли-небудь бачив! Стільки витрачених годин!
Kyle Redfearn

3
У мене були витрачені години на це :) Велике спасибі товаришу
WaaleedKhan

12
@bashan Це можна зробити на раскадровці, є прапорець "Налаштувати вставки для прокрутки"
aryaxt

11
Зверніть увагу, що якщо ви використовуєте вбудований сегмент, а контролером перегляду колекції є вбудований контролер, вам потрібно викликати цей метод до контролера PARENT, а не всередині вашого UICollectionViewController
csotiriou

87

Ви також можете встановити це в розкадруванні.

Переконайтеся, що вибрали ViewController, а потім зніміть прапорець біля пункту "Налаштувати вставки для прокрутки".

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

Однак я не перевіряв, що робить цей метод IB / Storyboard на iOS6. За допомогою методу коду потрібно перевірити, чи відповідає ВК на метод:

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

3
Дякую, чувак, це економить мені багатство часу та прогресу, справді врятувало.
Darklex

17

Я виявив, що додавання:

self.edgesForExtendedLayout = UIRectEdgeNone;

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

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

Цілком варто прочитати


5

Можливо, ви можете спробувати примусити це значення до 0, використовуючи макет потоку делегатів подання колекції:

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

Змініть значення вашого заповнення.


5

Свіфт 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)
}

0

Як деякі інші вже згадувалося, viewController.automaticallyAdjustsScrollViewInsetsбув застарілим з прошивкою 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)
}

Раніше

висота щодо супервигляду поганий макет подання колекції

Після

висота щодо безпечної зони хороший макет подання колекції


0

Спробуйте використати self.feedCollectionView.contentInsetAdjustmentBehavior = .neverу поданні колекції. Це насправді спрацювало для мене.


0

Swift 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 

застаріла з iOS 11.

Моє рішення:

collectionView.contentInsetAdjustmentBehavior = .never

-3

Подібно до відповіді @Svoatoslav, ви можете спробувати наступне:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    yourCollectionView.contentOffset = CGPointMake(0, 0);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.