2017-02-11 3 views
0

Ich habe eine UICollectionView mit jeder Seite genau die gleiche Größe wie der Bildschirm. Die Bildlaufrichtung ist horizontal. Ich möchte die aktuellen sichtbaren Zellen abrufen, während die Ansicht gescrollt wird.UICollectionView indexPathsForVisibleItems funktioniert nicht in einem bestimmten Fall

Zum Beispiel, wenn ich auf einer ganzen Seite bin, bekomme ich nur den Index dieser Seite, wenn ich in der Mitte von zwei Seiten scrollen, dann kann ich diese zwei Seiten Index bekommen. Ich weiß, dass es indexPathsForVisibleItems Methode gibt. Es funktioniert für den Fall beim Scrollen in der Mitte. Es wird den Index von zwei Zellen zurückgeben.

Aber wenn ich auf einer ganzen Seite bin, wird es auch zwei Seiten zurückgeben. Seltsamerweise geschieht dies auf meinem iPhone 7 Plus, aber wenn ich es auf iPhone 6s teste, funktioniert es gut und gibt den einzelnen Index der gegenwärtigen Seite zurück.

Scheint die Methode funktioniert nicht für größere Bildschirme?

Meine Sammlung Ansicht:

CGSize screenSize = [UIScreen mainScreen].sc_fixedBounds.size; 
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init]; 
    flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; 
    flowLayout.minimumLineSpacing = 0.0; 
    flowLayout.minimumInteritemSpacing = 0.0; 
    flowLayout.itemSize = screenSize; 

    UIColloctionView *collectionView = 
     [[UICollectionView alloc] initWithFrame:SCRectMakeWithSize(screenSize) collectionViewLayout:flowLayout]; 
    collectionView.backgroundColor = [UIColor clearColor]; 
    collectionView.scrollsToTop = NO; 
    collectionView.pagingEnabled = YES; 
    collectionView.showsHorizontalScrollIndicator = NO; 
    collectionView.showsVerticalScrollIndicator = NO; 

Die Methode i aktuellen sichtbaren Index erhalten folgende Zwecke verwendet:

NSArray<NSIndexPath *> *indexPaths = [_tabsCollectionView indexPathsForVisibleItems]; 

Auf größeren Bildschirm, diese 2 Artikel zurück, wenn ich die ganze Seite sehen bin.

+1

Einige verwandte Code wird hilfreich sein. –

+0

Ich weiß nicht, über Ihr Problem, aber eine andere Arbeit könnte um den Scroll-Offset zu überprüfen, um den IndexPath abrufen. Es ist einfacher, wenn Sie nur einen Abschnitt, mehrere Zeilen oder eine Zeile pro Abschnitt haben. – Larme

Antwort

1

Sogar ich war mit der ähnlichen Art von Problem konfrontiert.

Die Abhilfe, die für mich unter

Swift 3Lösung

var visibleRect = CGRect() 
    visibleRect.origin = collectionView.contentOffset 
    visibleRect.size = collectionView.bounds.size 
    let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY) 

    guard let visibleIndexPath: IndexPath = collectionView.indexPathForItem(at: visiblePoint) else { return } 
    print(visibleIndexPath) 

Hoffnung diese Lösung funktioniert für Sie gearbeitet.

Verwandte Themen