with automatic ios objective-c uicollectionview uicollectionviewcell
Proyecto en sí

ios - automatic - UICollectionView estimatedItemSize: la última celda no está alineada



collectionview with autolayout (6)

He hecho el proyecto pequeño similar (una vista de colección horizontal en bruto (1 * N)), aquí está el github. Espero que sea útil para su requerimiento.

https://github.com/texas16/HorizontalCollectionView

Quiero hacer un flujo horizontal horizontal de desplazamiento UICollectionView con estimateItemSize y preferredLayoutAttributesFittingAttributes en la celda. Pero hay algo mal con la última célula. ¿Alguna idea de dónde está el problema? Proyecto en sí

@implementation RowCollectionView - (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout { if (self = [super initWithFrame:frame collectionViewLayout:layout]) { [self configureRowCollectionView]; } return self; } - (void) awakeFromNib { [super awakeFromNib]; [self configureRowCollectionView]; } - (void) configureRowCollectionView { self.backgroundColor = [UIColor lightGrayColor]; self.dataSource = self; self.delegate = self; // Horizontal Direction UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout; flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; // Estimated Item Size flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height); [self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class])]; } - (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 10; } - (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor redColor]; return cell; } @end @implementation RowCollectionViewCell - (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy]; attributes.size = CGSizeMake(80, 80); return attributes; } @end


Está configurando estimateItemSize en el inicio de la vista.

Debes configurarlo en algún controlador.

También,

Si todas sus celdas tienen la misma altura, utilice la propiedad itemSize, en lugar de esta propiedad, para especificar el tamaño de celda.

Documentación: estimatedItemSize


hay un método simple para resolver esto. Puede agregar el número de celdas prototipo para verificar la celda en la posición requerida. Una vez que encuentras el problema en la última celda. Verifique las inserciones de celda en la ventana de Inspector.


Llamas a supermétodo pero no usaste atributos de diseño súper devueltos.

[super preferredLayoutAttributesFittingAttributes:layoutAttributes];

Puede intentar imprimir los atributos de diseño originales frente a los atributos de diseño de super. Algunas veces, no necesitas llamar a la súper función.

En segundo lugar, puede crear flowlayout personalizado o establecer un recuadro para que su celda se alinee en la parte superior. Hice esto en mi proyecto.


El tamaño de celda personalizado debe ser el mismo que el de la celda de vista de colección, por favor verifique eso. Puede resolver el problema por usted.


Puedes considerarlo una sugerencia. Según mi opinión, la altura de UICollectionView es superior a UICollectionViewCell Height, por eso está sucediendo. por favor haz que sean iguales