7

以下のコードのように、URL から画像を uiimage にロードし、それらの画像を uitableviewcell uiimageview に追加します。画像サイズはわかりませんが、tableviewcell 画像で強制的に 40x40 にする必要があります。画像は、uitableview でさまざまな幅で読み込まれ続けます。

uiimage のサイジング/スケーリングに関連する他の投稿を読んでください。しかし、それらの解決策は私にとってはうまくいきません。uitableviewcell に含まれている uiimageview を使用しているのに対し、独自の uiimageview を作成しているためだと考えています。

コードはこちら >

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

}

コンテンツモードを設定してみました(アスペクトフィルとアスペクトフィットの両方を試しました)、フレームをリセットして、autoresizingmask、clipTobound を設定してみました。それのどれも物事を変えませんでした。

4

3 に答える 3

22

Applesのサンプルプロジェクト「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;
于 2012-08-07T14:10:29.780 に答える
1

私は同じ問題を抱えていましたが、これは私にとって完璧に機能しました。

UIImage を選択し、属性インスペクターに移動して、「Clip Subviews」をチェックします。

画像のサイズに制約が設定されていることを確認してください。

于 2014-12-06T17:37:17.247 に答える