UICollectionViewFlowLayout ist estimatedItemSize bricht scrollen?

(BEARBEITEN : es scheint zu funktionieren gut ab iOS 9. Ich habe nicht umfangreiche tests, aber das Beispiel funktioniert. Dies bestätigt, dass der bug vorhanden in iOS 8.)

Ich verbrachte eine Menge Zeit testen UICollectionView Flow-Layout selbst sizing Verhalten. Nach viel Frust, das Problem ist eingegrenzt auf die Tatsache, dass sobald man setzt die estimatedItemSize zu einer nicht-null-Größe, das scrollen funktioniert nicht mehr richtig.

In meinem Beispiel anstatt zu zeigen, 40 items es zeigt nur 32.

Habe ich die Kopie eingefügt den code unten. Getestet hab ich viele Dinge beginnen mit einer schnellen version.

Grundsätzlich ist es nicht zu berechnen und/oder ordnungsgemäß aktualisiert, das layout ist collectionViewContentSize()

Hier eine komplette demo - http://git.io/AIrHNA

Jemand kann mich in die richtige Richtung?

Danke

@implementation ViewControllerObjcC

static NSString * const reuseIdentifier = @"Cell";
-(UICollectionViewFlowLayout*)flowLayout{
  return (UICollectionViewFlowLayout*)self.collectionViewLayout;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
  CGSize estimatedSize = CGSizeMake(self.view.frame.size.width, 25.0);
  BOOL testEstimatedItemSize = true;
  if (testEstimatedItemSize) {
    [self flowLayout].estimatedItemSize = estimatedSize;
  }else{
    [self flowLayout].itemSize = estimatedSize;
  }

}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 40;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
  UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
  UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 30)];
  [cell.contentView addSubview:label];
  label.text = [NSString stringWithFormat:@"%ld",(long)indexPath.row];
  label.backgroundColor = [UIColor redColor];
  return cell;
}
  • Ich bin überrascht zu hören, dass Sie in der Lage gewesen zu verwenden estimatedItemSize überhaupt. In meine Erfahrung, alles, was geschieht, wenn ich es benutze ist, dass ich Abstürzen. Mein Fazit ist, dass diese Funktion von selbst-sizing-Zellen, obwohl beworben, die in der WWDC 2014-videos, wurde eigentlich nie online. Also mein Rat: versuchen Sie nicht, um diese Funktion zu nutzen, gehen Sie einfach zurück zur Messung von Element-Größen "von hand", wie wir es in iOS 7, und Sie werden in Ordnung sein. (Natürlich würde ich mich freuen zu erfahren, dass ich falsch bin, über dieses und jenes, es hat angefangen zu arbeiten...)
  • Matt, ich danke Ihnen für Ihre wertvolle Ratschläge. Ich dachte an genau das, was Sie mir erzählen werden beim schreiben der ersten post. Egal, es ist frustrierend für mich, diese ganze Zeit der recherche zu diesem problem, beworben als gelöst auf der WWDC. Wie bereits erwähnt, habe ich verengt das problem auf ein einfaches Beispiel, und ich bin bereit, zu Graben, um den Grund gehen. Ich hoffe, dass mir etwas fehlt und jemand wird mir helfen, es zu sehen.
InformationsquelleAutor Adrian | 2014-12-26
Schreibe einen Kommentar