UIImageView no cambió de tamaño correctamente en las células auto dimensionadas iOS 8

introduzca la descripción de la imagen aquí

Estoy tratando de lograr algo similar a la aplicación 9gag donde las celdas cambian de tamaño automáticamente según el tamaño de la image. El ancho abraza los lados, pero la altura cambia de tamaño según sea necesario.

Tengo una label que consiste en el título que se encuentra arriba, así como una UIImageView y debajo de la image que tengo icons de compartir, etc. He establecido las restricciones para que la image sea UIImageView y para los icons de compartir más, así como para ambos espacios iniciales y finales. Parece que he intentado cada combinación de cambiar "Modo" de la vista (es decir, relleno de aspecto, ajuste de aspecto) cuando hago ajustes de aspecto, dimensiona las imágenes correctamente pero agrega un montón de relleno tanto a las partes inferior y superior de la image image (captura de pantalla incluida a continuación) introduzca la descripción de la imagen aquí

La label y los icons tienen todas las restricciones apropiadas establecidas (por lo que puedo decir)

He buscado durante horas tratando de encontrar a alguien con un problema similar pero en vano parece que no puedo encontrar nada en lo que respecta a las células de tamaño propio que usan imágenes que pueden variar en tamaño.

¿Alguien puede apuntarme en la dirección correcta o saber la solución a mi problema? ¡Toda la ayuda es muy apreciada como siempre!

Tan rápido como lo he visto, no se puede hacer cambiar el tamaño de la image desde Interface Builder. Tendría que escribir manualmente el código en su file ViewController.m. Tiene algo como esto:

- (void) adjustImageSize{ CGSize imageSize = self.imageView.image.size; CGSize imageViewSize = self.imageView.frame.size; float imageAspectRatio = imageSize.width/imageSize.height; CGRect frame = self.statusImage.frame; frame.size.height =imageViewSize.width/imageAspectRatio; self.imageView.frame = frame; // set your Cell's frame here, based on your other constraints (labels/buttons etc), after you have resized your image } 

Puede llamar a esto desde su function de fuente de datos tableView. Y luego agregue esta function de delegado para decirle a la tablaVer la altura dinámica de cada celda.

 - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; return cell.frame.size.height; } 

Así es como hice el cambio de tamaño dynamic de imágenes para una aplicación basada en NewsFeed. Espero que esto ayude.

Esto ocurre debido al tamaño de contenido intrínseco de UIImageView (tamaño de image). Mientras que el ancho de la vista de la image se networkingimensiona con las restricciones de espacio iniciales y posteriores, nada limita su altura, por lo que permanece igual a la altura de la image original.

La solución es calcular una relación de aspecto de la image y establecerla como una restricción de relación con el ancho UIImageView

 @interface PostImageViewCell() @property (nonatomic, strong) NSLayoutConstraint *aspectConstraint; @end @implementation PostImageViewCell - (void) setAspectConstraint:(NSLayoutConstraint *)aspectConstraint { if (_aspectConstraint != nil) { [self.postImage removeConstraint:_aspectConstraint]; _aspectConstraint = nil; } if (aspectContraint != nil) { [self.postImage addConstraint:aspectConstraint]; _aspectConstraint = aspectConstraint } } - (void)setPicture:(UIImage *)image { CGFloat aspect = image.size.width / image.size.height; self.aspectConstraint = [NSLayoutConstraint constraintWithItem:self.postImage attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.postImage attribute:NSLayoutAttributeHeight multiplier:aspect constant:0.0]; [self.postImage setImage:image]; } @end 

Tengo el mismo problema.

Noté que la celda calculará su tamaño en function de la image en su imageView y que ignora que UIImageView cambiará el tamaño de la image para que se ajuste a sus límites.

Ejemplo: su image tiene el tamaño 1000×1000. Si configura su modo de contenido en 'Ajuste de aspecto', UIImageView mostrará la image con el ancho de sí mismo. Entonces, la image mostrada puede tener el ancho de su iPhone, por ejemplo 750px y la altura 750px (es un cuadrado). Ahora, la celda cambiará de tamaño como si el imageView mostrara la image en su formatting original; 1000×1000. Lo que conduce a un espacio en blanco no deseado.

Mi solución ahora es networkingucir el tamaño de la image manualmente, pero esto es muy costoso y también crea algunos otros problemas con mi interfaz de usuario.

¿Encontraste una mejor solución?