(EDIT: sembra funzionare bene a cominciare iOS 9 Non ho fatto prove approfondite, ma l'esempio funziona Ciò conferma il bug presente in iOS 8...)UicollectionViewFlowLayout's stimatoItemSize interrompe lo scorrimento?
ho speso un sacco di tempo testando il comportamento di dimensionamento del layout del flusso di UICollectionView. Dopo un sacco di frustrazione, il problema si riduce al fatto che non appena uno imposta estimatedItemSize
su una dimensione diversa da zero, lo scorrimento non funziona più correttamente.
Nel mio esempio invece di mostrare 40 elementi vengono visualizzati solo 32.
ho copia incollato il codice qui sotto. Ho provato molte cose a partire da una versione Swift.
Fondamentalmente si riesce a calcolare e/o adeguatamente aggiornare il layout di collectionViewContentSize()
Ecco una demo completa http://git.io/AIrHNA
Qualcuno mi può puntare nella giusta direzione?
Grazie
@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;
}
Sono sorpreso di sentire che siete stati in grado di usare 'estimateItemSize' affatto. Nella mia esperienza, tutto ciò che accade quando lo uso è che mi schianto.La mia conclusione è che questa funzionalità di auto-dimensionamento delle celle, benché pubblicizzata nei video del WWDC 2014, non è mai arrivata online. Quindi il mio consiglio è: non provare a utilizzare questa funzione, basta tornare a misurare le dimensioni degli oggetti "a mano" come abbiamo fatto in iOS 7, e starai bene. (Naturalmente sarei lieto di sapere che mi sbaglio su questo e che ha iniziato a funzionare ...) – matt
Matt, grazie per il tuo prezioso consiglio. Stavo pensando esattamente a quello che mi stai dicendo mentre scrivi il post iniziale. Indipendentemente da ciò, è frustrante per me passare tutto questo tempo alla ricerca di questo problema, pubblicizzato come risolto al WWDC. Come accennato, ho ristretto il problema a un semplice esempio e sono disposto a scavare fino in fondo. Spero di perdere qualcosa e qualcuno mi aiuterà a vederlo. – Adrian