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?


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 .


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;
}

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


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.


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)
}

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


0

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


0

Swift 5.2 / Xcode 11.3

viewController.automaticallyAdjustsScrollViewInsets 

ist seit iOS 11 veraltet.

Meine Lösung:

collectionView.contentInsetAdjustmentBehavior = .never

-3

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

- (void) viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    yourCollectionView.contentOffset = CGPointMake(0, 0);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.