2012-08-07 3 views
7

URLからの画像をuiimageに読み込んだ後、これらの画像を下のコードのようにuitableviewcell uiimageviewに追加します。画像のサイズはわかりませんが、テーブルビューの画像で40x40にする必要があります。画像は、uitableviewでさまざまな幅で読み込みを続けます。URLからUIImageを読み込んだとき、UITableViewCellでUIImageViewのサイズを設定しますか?

uiimageサイジング/スケーリングに関連する他の記事を読んでください。しかし、それらの解決策は私のためには機能しません。私はuuitableviewcellに含まれているuiimageviewを使用しているので自分自身のuiimageviewを作成していると思っています。

は、ここで私は、コンテンツモード(aspectfillとアスペクトフィット感の両方を試してみました)を設定しようとしたコード>

- (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を設定し、フレームをリセットしてみました。それを変えたものはありませんでした。

+0

私はカスタムuiimageviewでこれを試しましたが、うまくいきます。 uitableviewcellに含まれているuimageviewで何かでなければならない – Augie

答えて

22

が見つかりました「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

私は試しましたが、あなた自身の答えを受け入れるために2日間待たなければならないというメッセージを受け取ります。 – Augie

+0

これはどのクラスのどのメッセージに入れておきますか?これはUITableViewまたはUITableViewCellのサブクラス内にありますか? –

+1

上記のコードはメインスレッドの 'tableView:cellForRowAtIndexPath:'にありましたが、後で、 'tableView:cellForRowAtIndexPath'からバックグラウンドスレッドを呼び出すリンゴ開発サイトの 'lazy table images'の例を模倣するようにコードを切り替えました。 'イメージをダウンロードし、それをuiimageに保存し、完了すると、uiimageをメインスレッドに戻してcell.imageViewに入れます。私は、icondownloaderは、サンプルプロジェクトのバックグラウンドで実行されているオブジェクトの名前だと思います。 – Augie

1

私は同じ問題を抱えていたし、これは私のために完全に働いたリンゴのプロジェクト例を見て答え。

UIImageを選択し、属性インスペクタに移動し、「サブビュークリップ」チェック

は、あなたがイメージのサイズに設定された制約を持っていることを確認してください。

関連する問題