2012-08-07 14 views
7

Ładowanie obrazów z adresu URL do pliku uiimage, a następnie dodawanie tych zdjęć do uiimageview, takiego jak poniższy kod. Nie znam rozmiarów zdjęć, ale trzeba je zmusić do 40x40 w obrazie tableviewcell. Obrazy nadal ładują się w różnych szerokościach w danym widoku.Ustaw rozmiar UIImageView w UITableViewCell, gdy UIImage jest ładowany z adresu URL?

Przeczytaj inne posty związane z wymiarowaniem i skalowaniem uiimage, ale te rozwiązania nie działają dla mnie. Myślę, że to dlatego, że używam uiimageview zawartego w uitableviewcell, a nie w tworzeniu własnego uiimageview.

Oto kod>

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

} 

Próbowałem ustawienie trybu Zawartość (próbowałem zarówno aspectfill i kształtu Fit), próbował resetowania ramki, ustawienie autoresizingmask, clipTobound. nic z tego nie zmieniło.

+0

Po prostu próbowałem tego z niestandardowym uiimageview i działa dobrze. Musi to być coś z załączonym uimageview w uitableviewcell – Augie

Odpowiedz

22

znaleźć odpowiedź patrząc na jabłka przykład projektu „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

Próbowałem, ale dostałem wiadomość "musisz czekać 2 dni, aby zaakceptować własną odpowiedź". – Augie

+0

Jakie przesłanie z tej klasy musisz włożyć? Czy to jest w twojej podklasie UITableView lub UITableViewCell? –

+1

Powyższy kod znajdował się w 'tableView: cellForRowAtIndexPath:' w głównym wątku, ale później przełączyłem mój kod tak, aby naśladować przykład w "leniwe obrazy tabel" na stronie Apple, która ma wywołać wątek tła z 'tableView: cellForRowAtIndexPath: ', a następnie pobierz obraz, zapisz go do pliku uiimage i po zakończeniu zwróć uiimage do głównego wątku, aby wstawić go do komórki.imageView. Myślę, że icondownloader to nazwa obiektu działającego w tle w przykładowym projekcie. – Augie

1

miałem ten sam problem i to działało idealnie dla mnie;

wybrać UIImage i przejść do atrybutów inspektora i sprawdzić „Klip subviews”

upewnij się, że ograniczenia ustanowione dla obrazu w rozmiarze.

Powiązane problemy