2010-07-05 13 views
16

Tengo una imagen que me gustaría ver en un UITableViewCell utilizando el estilo UITableViewCellStyleSubtitle que proporciona una UIImageView, y dos líneas de texto, además de una vista accesorio opcional.iOS SDK UIViewContentModeScaleAspectFit vs UIViewContentModeScaleAspectFill

Sin embargo, cuando establezco el modo de contenido UIImageView en cualquiera de UIViewContentModeScaleAspectFit o UIViewContentModeScaleAspectFill, parece que no importa. Ambos modos de contenido simplemente muestran toda la imagen, desplazando el texto a la derecha para dejar espacio a la imagen.

¿Alguien tiene algún ejemplo de cómo estos difieren realmente en la práctica? Los documentos dicen:

UIViewContentModeScaleAspectFit: 
Scales the content to fit the size of the view by maintaining the aspect ratio. Any  remaining area of the view’s bounds is transparent. 

UIViewContentModeScaleAspectFill: 
Scales the content to fill the size of the view. Some portion of the content may be clipped to fill the view’s bounds. 

Pero estos modos de contenido no parecen comportarse como se anuncia.

EDIT: Estoy corriendo SDK de iOS 4.

+0

Lo único que se me ocurre es que quizás UITableViewCell con UITableViewCellStyleSubtitle anula estos modos de contenido para cambiar automáticamente el tamaño de la vista de la imagen al tamaño de la imagen que se está insertando. Esto tiene algún sentido a partir de los resultados logrados a través de la práctica. – Dalmazio

+0

En general, descubrí que cuando UIKit genera automáticamente el aspecto de una vista, parece que solo toma los parámetros y los usa como pautas. En cambio, atraviesa un código de propiedad extraño y, en ocasiones, puede generar resultados extraños. A veces es más fácil simplemente prescindir de los valores predeterminados que le dan y crear el UITableViewCell desde cero. –

Respuesta

9

La razón por la que no se ve una diferencia entre esos modos está que el UITableViewCell ajusta automáticamente su vista de imagen para que se ajuste a la relación de aspecto de la imagen. Los modos de contenido solo entran en juego cuando la relación de aspecto de la vista es diferente de la de la imagen.

O bien anula layoutSubviews en tu clase personalizada UITableViewCell o crea una vista de imagen tú mismo (no utilices la que proporciona la celda de la vista de tabla).

+0

+1: ¡Realmente no responde la pregunta titular, pero encontré esto en Google y me ayudó! Hice una subclase de 'UITableViewCell' que tenía un' UIImageView' que nombré, naturalmente, 'imageView'. Estaba saltando y no pude entender por qué. Simplemente cambiarle el nombre hizo que el método 'layoutSubviews' de' UITableViewCell' subyacente dejara de mover mi imagen. – ArtOfWarfare

35

que tenía el mismo problema. Parece que la documentación de Apple es un poco insuficiente.

Encontré la respuesta buscando en Internet. http://www.iphonedevsdk.com/forum/iphone-sdk-development/2973-crop-image.html

Básicamente,

img1.contentMode = UIViewContentModeScaleAspectFill; 
img1.clipsToBounds = YES; 

Si usted quiere que sea un poco más sofisticado, echa un vistazo a este post: UIImageView change Width and Height

+3

Esto no funciona para una celda de vista de tabla. – Ryan

+3

Tres malditas horas después, 'clipsToBounds' era exactamente lo que estaba buscando. Gracias. –