Diseño automático en UICollectionViewCell no funciona

Tengo un UICollectionView simple con celdas que tienen un solo UITextView. El UITextView está restringido a los bordes de la celda, por lo que debe permanecer del mismo tamaño que el tamaño de la celda.

El problema que tengo es que, por alguna razón, estas restricciones no funcionan cuando especifico el tamaño de la celda a través de collectionView: layout: sizeForItemAtIndexPath :.

Tengo el tamaño de la celda establecido en 320×50 en el guión gráfico. Si devuelvo un tamaño con 2 veces la altura del tamaño de la celda con sizeForItemAtIndexPath :, la UITextView permanece la misma altura a pesar de las restricciones que establecí. Estoy usando Xcode 6 GM.

Mi código de controlador de vista es:

@implementation TestViewController - (void)viewDidLoad { [super viewDidLoad]; self.collectionView.delegate = self; self.collectionView.dataSource = self; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UICollectionViewCell *c = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; NSLog(@"%f", c.frame.size.height); UITextView *tv = (UITextView *)[c viewWithTag:9]; NSLog(@"%f", tv.frame.size.height); } - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 1; } - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath]; return cell; } - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *)collectionView.collectionViewLayout; CGSize size = flowLayout.itemSize; size.height = size.height * 2; return size; } @end 

Esos registros en viewDidAppear: dame una salida de:
100.00000
50.00000
Como puede ver, la altura UITextView no cambia con la altura de la celda.

Aquí hay una captura de pantalla del guión gráfico que configuré con una UITextView restringida en UICollectionViewCell:

enter image description here

Sé que el uso de restricciones de diseño automático funciona bien con UITableViewCells y el cambio de tamaño dynamic. No tengo idea de por qué no funciona en este caso. ¿Alguien tiene alguna idea?

Bueno, solo miré en los foros de desarrolladores de iOS. Aparentemente, se trata de un error con el iOS 8 SDK que se ejecuta en dispositivos con iOS 7. La solución consiste en agregar lo siguiente a su subclase de UICollectionViewCell:

 - (void)setBounds:(CGRect)bounds { [super setBounds:bounds]; self.contentView.frame = bounds; } 

Código Swift equivalente:

 override var bounds: CGRect { didSet { contentView.frame = bounds } } 

Aquí está la solución, si no está subclasificando UICollectionViewCell . Simplemente agregue estas dos líneas debajo de su cellForItemAtIndexPath: after dequeueReusableCellWithReuseIdentifier:

Obj-C

 [[cell contentView] setFrame:[cell bounds]]; [[cell contentView] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight]; 

Swift – 2.0

 cell.contentView.frame = cell.bounds cell.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 

Swift 2.0:

 cell.contentView.frame = cell.bounds cell.contentView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]