2012-08-07 5 views
7

Laden von Bildern von URL in ein uiimage und dann Hinzufügen dieser Bilder zu einem uitableviewcell uiimageview, wie unten Code. Ich kenne die Bildgrößen nicht, muss sie aber im Tabellenansichtsbild auf 40x40 setzen. Die Bilder werden im uitableview mit unterschiedlichen Breiten geladen.Legen Sie UIImageView Size in UITableViewCell fest, wenn UIImage von URL geladen wurde?

Lesen Sie durch andere Beiträge im Zusammenhang mit uiimage Sizing/Skalierung, aber diese Lösungen funktionieren nicht für mich. Ich denke, es liegt daran, dass ich den in uitableviewcell enthaltenen uiimageview verwende, um meinen eigenen uiimageview zu erstellen.

Hier ist der code>

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

} 

Ich habe versucht Content-Modus-Einstellung (versucht, sowohl aspectfill und Aspekt fit), versucht, den Rahmen zurückzusetzen, das Setzen von autoresizingmask, clipTobound. Nichts davon hat etwas verändert.

+0

Ich habe es gerade mit einem benutzerdefinierten uiimageview versucht und es funktioniert gut. Muss etwas mit der enthaltenen uimageview in uitableviewcell – Augie

Antwort

22

die Antwort gefunden Blick auf Apples Beispielprojekt „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

Ich habe versucht, aber eine Nachricht bekommen "Sie müssen 2 Tage warten, um Ihre eigene Antwort zu akzeptieren". – Augie

+0

In welche Nachricht welcher Klasse müssen Sie dies eintragen? Ist dies in Ihrer Unterklasse von UITableView oder UITableViewCell? –

+1

obigen Code war in 'tableView: cellForRowAtIndexPath:' im Hauptthread, aber später habe ich meinen Code um das Beispiel in 'Lazy Table Images' auf Äpfel Dev Site nachahmen, die einen Hintergrund Thread aus 'tableView: cellForRowAtIndexPath aufrufen soll: 'und dann laden Sie das Bild, speichern Sie es in einem uiimage und nach der Fertigstellung, das uiimage zum Haupt-Thread zurück, um in die cell.imageView zu setzen. Ich glaube, icondownloader war der Name des Objekts, das im Beispielprojekt im Hintergrund läuft. – Augie

1

Ich hatte das gleiche Problem und das funktionierte perfekt für mich;

die UIImage auswählen und Attribute Inspektor gehen und überprüfen

„Subviews Clip“ stellen Sie sicher, Einschränkungen für das Image der Größe festgelegt haben.

Verwandte Themen