2012-08-07 8 views
7

Cargando imágenes de URL en una uiimage y luego agregar esas imágenes a uitableview uiimageviewview, como el código siguiente. No conozco el tamaño de las imágenes, pero necesito forzarlas a tener 40x40 en la imagen tableviewcell. Las imágenes siguen cargando con diferentes anchos en la vista de uitable.Establecer UIImageView Size en UITableViewCell cuando UIImage cargó desde la URL?

Lea otras publicaciones relacionadas con el dimensionamiento/escalado de uiimage, pero esas soluciones no me funcionan. Estoy pensando que es porque estoy usando la uiimageview incluida en uitableviewcell frente a la creación de mi propia uiimageview.

Aquí está el código>

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

UITableViewCell *cell = [[UITableViewCell alloc] init]; 

ItemForSale *item = [listOfItems objectAtIndex:indexPath.row]; 
cell.textLabel.text = item.name; 
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
cell.textLabel.font = [UIFont systemFontOfSize:14]; 

NSURL *url = [NSURL URLWithString: item.imgPath]; 
UIImage *thumbnail = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 
if (thumbnail == nil) { 
    thumbnail = [UIImage imageNamed:@"noimage.png"] ; 
} 
cell.imageView.image = thumbnail; 
cell.imageView.contentMode = UIViewContentModeScaleAspectFill; 
cell.imageView.frame = CGRectMake(0, 0, 40, 40); 
cell.imageView.autoresizingMask = UIViewAutoresizingNone; 
cell.imageView.clipsToBounds = YES; 

return cell; 

} 

He tratado de establecer el modo de contenido (intentado tanto aspectfill y aspecto ajuste), intentado reajustar el marco, establecer autoresizingmask, clipTobound. nada de eso cambió nada.

+0

Acabo de probar esto con una uiimageview personalizada y funciona bien. Debe ser algo con uimageview incluido en uitableviewcell – Augie

Respuesta

22

encontrado la respuesta mirando ejemplo de proyecto manzanas "LazyTableImages"

NSURL *url = [NSURL URLWithString: item.imgPath]; 
UIImage *thumbnail = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]]; 
if (thumbnail == nil) { 
    thumbnail = [UIImage imageNamed:@"noimage.png"] ; 
} 
CGSize itemSize = CGSizeMake(40, 40); 
UIGraphicsBeginImageContext(itemSize); 
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height); 
[thumbnail drawInRect:imageRect]; 
cell.imageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return cell; 
+0

Lo intenté, pero aparece un mensaje "debe esperar 2 días para aceptar su propia respuesta". – Augie

+0

¿Qué mensaje de qué clase tienes que poner esto? ¿Está esto dentro de su subclase de UITableView o UITableViewCell? –

+1

el código anterior estaba en 'tableView: cellForRowAtIndexPath:' en el hilo principal, pero luego cambié mi código para imitar el ejemplo en 'imágenes de tabla perezosa' en el sitio apples dev, que es llamar a un hilo de fondo de 'tableView: cellForRowAtIndexPath: 'y luego descargue la imagen, guárdela en una uiimage y, una vez completada, devuelva la uiimage al hilo principal para ponerla en cell.imageView. Creo que icondownloader fue el nombre del objeto que se ejecuta en segundo plano en el proyecto de ejemplo. – Augie

1

que tenía el mismo problema y esto funcionó perfectamente para mí;

seleccione el UIImage e ir al inspector y atributos de verificación "Clip subvistas"

asegurarse de que tiene las limitaciones establecidas para el tamaño de la imagen.

Cuestiones relacionadas