UICollectionView fügt den oberen Rand hinzu

75

Ich möchte ein UICollectionView-Steuerelement einfügen, das Daumen horizontal anzeigt (nur eine einzige Daumenzeile). Aus irgendeinem Grund drückt die UICollectionView die Daumen 44 Pixel nach unten, sodass die Höhe "0" tatsächlich "44" beträgt. Ich gehe davon aus, dass dieser Bereich hinzugefügt werden könnte, um die Höhe der Navigationsleiste zu berücksichtigen (ich nehme nur an). Da sich meine UICollectionView nur auf einem Teil des Bildschirms befindet, möchte ich diesen Rand nicht. Gibt es eine Möglichkeit, es zu entfernen?

Bashan
quelle

Antworten:

195

Das Problem liegt möglicherweise in den Inhaltseinfügungen der Sammlungsansicht. Versuchen Sie, self.automaticallyAdjustsScrollViewInsets = NO;die viewDidLoadMethode des View Controllers hinzuzufügen .

Sviatoslav Yakymiv
quelle
3
Funktioniert super. Es ist sehr seltsam, dass dieses Ding nicht auf dem Storyboard angesprochen werden kann.
Bashan
10
Das ist das Dümmste, was ich je gesehen habe! So viele Stunden verschwendet!
Kyle Redfearn
3
Ich habe Stunden damit verbracht :) Vielen Dank Kumpel
WaaleedKhan
12
@bashan Es kann auf dem Storyboard gemacht werden, es gibt ein Kontrollkästchen mit dem Namen "Scroll View Insets anpassen"
aryaxt
11
Beachten Sie, dass Sie, wenn Sie einen Einbettungs-Segue verwenden und Ihr Sammlungsansichts-Controller der eingebettete Controller ist, diese Methode für den PARENT-Controller aufrufen müssen und nicht in Ihrem UICollectionViewController
csotiriou
87

Sie können dies auch im Storyboard festlegen.

Stellen Sie sicher, dass Sie den ViewController ausgewählt haben, und deaktivieren Sie dann "Bildlaufansichten anpassen".

Geben Sie hier die Bildbeschreibung ein

Ich habe jedoch nicht getestet, was diese IB / Storyboard-Methode unter iOS6 bewirkt. Mit der Codemethode müssen Sie überprüfen, ob der VC auf die Methode reagiert:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
Geschwister
quelle
3
Danke Alter, das spart mir eine Menge Zeit und Fortschritt, wirklich gespart.
Darklex
17

Ich fand das Hinzufügen:

self.edgesForExtendedLayout = UIRectEdgeNone;

Im View Controller habe ich die UICollectionView geladen, um das Problem zu lösen, da ich die akzeptierte Antwort nicht zum Laufen bringen konnte.

Die Frage, auf die ich diese Antwort gefunden habe, ist hier zu finden und bietet eine äußerst ausführliche und interessante Erklärung für den Unterschied zwischen automatisch angepassten Bildlaufansichten, erweiterten Layouts und Kanten für erweiterte Layouts.

Eine Lektüre wert

simon_smiley
quelle
5

Möglicherweise können Sie versuchen, diesen Wert mit 0 zu erzwingen, indem Sie das Ablauflayout "Delegieren" der Sammlungsansicht verwenden:

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

Ändern Sie den Wert Ihrer Polsterung.

Jordan Montel
quelle
5

Swift 3:

Zuerst möchten Sie die viewController automaticallyAdjustsScrollViewInsetsauf false setzen:

self.automaticallyAdjustsScrollViewInsets = false

Dann sollten Sie in der Lage sein, die Kanteneinsätze entsprechend anzupassen:

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)
}
Josh O'Connor
quelle
0

Wie einige andere erwähnt haben, viewController.automaticallyAdjustsScrollViewInsetsist seit iOS 11 veraltet . Meine Lösung...

Swift 4.2, Xcode 10.1, iOS 12.1:

Aus irgendeinem Grund collectionView.contentSize.heighterschien es kleiner als die aufgelöste Höhe meiner Sammlungsansicht. Zuerst habe ich eine automatische Layoutbeschränkung in Bezug auf die Hälfte der Höhe der Übersicht verwendet. Um dies zu beheben, habe ich die Einschränkung so geändert, dass sie relativ zum "sicheren Bereich" der Ansicht ist.

Die erlaubte mir , die Zellenhöhe zu setzen , um vertikal meine Sammlung Ansicht zu füllen mit 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)
}

Vor

Höhe relativ zur Übersicht schlechtes Layout der Sammlungsansicht

Nach

Höhe relativ zum sicheren Bereich Gutes Layout der Sammlungsansicht

Andrew Kirna
quelle
0

Versuchen Sie es self.feedCollectionView.contentInsetAdjustmentBehavior = .neverin der Sammlungsansicht. Das hat bei mir tatsächlich funktioniert.

Samarey
quelle
0

Swift 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 

ist seit iOS 11 veraltet.

Meine Lösung:

collectionView.contentInsetAdjustmentBehavior = .never
Abdurrahman
quelle
-3

Ähnlich wie bei der Antwort von @Sviatoslav können Sie Folgendes versuchen:

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

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