2012-08-07 8 views
7

Caricamento immagini da URL in uiimage e quindi aggiunta tali immagini a una uiimageViewcell uiimage, come sotto il codice. Non conosco le dimensioni dell'immagine, ma ho bisogno di forzarle ad essere 40x40 nell'immagine tableviewcell. Le immagini continuano a caricarsi con diverse larghezze in uitableview.Imposta UIImageView Size in UITableViewCell quando UIImage è caricato dall'URL?

Leggi altri post relativi a dimensionamento/ridimensionamento di uiimage, ma queste soluzioni non funzionano per me. Penso che sia perché sto usando l'immagine ingrandita inclusa in uitableviewcell vs creando la mia immagine uiimageview.

Ecco il codice>

- (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; 

} 

Ho provato la modalità di impostazione dei contenuti (provato sia aspectfill e l'aspetto in forma), provato a ripristinare la cornice, impostando autoresizingmask, clipTobound. niente di ciò ha cambiato nulla.

+0

Ho appena provato questo con una uiimageview personalizzata e funziona bene. Deve esserci qualcosa con la uimageview inclusa in uitableviewcell – Augie

risposta

22

trovato la risposta guardando Mele esempio di progetto "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

ho provato, ma ottenere un messaggio "è necessario attendere 2 giorni per accettare la propria risposta". – Augie

+0

Quale messaggio di quale classe devi inserire? È presente nella sottoclasse di UITableView o UITableViewCell? –

+1

codice precedente era in 'tableView: cellForRowAtIndexPath:' nel thread principale, ma in seguito ho cambiato il mio codice per simulare l'esempio in 'lazy table images' sul sito di mele dev, che è quello di chiamare un thread in background da 'tableView: cellForRowAtIndexPath: 'e quindi scaricare l'immagine, salvarla in uiimage e al termine, restituire l'immagine al thread principale da inserire in cell.imageView. Penso che icondownloader fosse il nome dell'oggetto in esecuzione in background nel progetto di esempio. – Augie

1

Ho avuto lo stesso problema e questo ha funzionato perfettamente per me;

selezionare l'UIImage e andare a attributi ispettore e controllare "clip subviews"

assicurarsi di avere vincoli impostati per la dimensione dell'immagine.