4

XIBファイルで作成したUITableViewCellプロトタイプに基づいてテーブルを作成しています。セルは、いくつかのラベルと画像ビューで構成されており、デバイスの幅全体に合わせて拡大する必要があります。幅を拡大したら、高さも同じ比率で拡大したいので、画像は一貫して拡大縮小されます。

結果はまちまちです。次のコードを使用して、CELLのサイズを適切に設定することができました。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //pull the image from the array based on the indexPath
    NSUInteger row = [indexPath row];
    CITImage *image = [report.reportImages objectAtIndex:row];
    UIImage *img = [UIImage imageWithData:image.imageData];

    //see how we need to scale the image to make it fit within the full width of the screen
    float scale = tableView.frame.size.width /img.size.width;
    float imgHeight = img.size.height * scale;

    //return the necessary cell height
    return imgHeight;
}

問題は、セル内のUIImageViewのサイズが正しく変更されていないことです。描画の準備ができたら、次のコードを使用してセルのプロパティを設定しています。

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    //pull the image from the array based on the indexPath
    NSUInteger row = [indexPath row];
    CITImage *image = [report.reportImages objectAtIndex:row];
    UIImage *img = [UIImage imageWithData:image.imageData];

    //attempt to get a reusable cell
    CITImageCell *cell;
    cell= [tableView dequeueReusableCellWithIdentifier:@"CITImageCellIdentifier"];
    if (cell == nil) {
        // Load the top-level objects from the custom cell XIB.
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CITImageCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    //see how we need to scale the image to make it fit within the full width of the screen
    float scale = tableView.frame.size.width /img.size.width;
    float imgHeight = img.size.height * scale;

    NSLog (@"Height %f",cell.imageView.frame.size.height);
    //size the image view
    cell.imageView.frame = CGRectMake(0,34, tableView.frame.size.width, imgHeight+34 );
    NSLog (@"Height %f",cell.imageView.frame.size.height);

    //assign the image
    cell.imageView.image = img;

    //return the cell ready to go
    return cell;

}

2つのNSLogステートメントは、高さの値が正しく計算されていることを確認しますが、画像が画面に表示されるとき、画像のサイズが正しく設定されることはめったにありません。ほとんどの場合、XIBファイルで定義されているサイズと同じですが、正しい高さになる場合もあります。あまり良いパターンは見つかりませんでした。これはテーブルの最初の項目ではなく、常に2番目、場合によっては4番目と5番目の項目です。

まだドキュメントや他の人の話を掘り下げていますが、私が最も得意とするのは、セルのサイズを正しく設定できることと、画像の高さが正しく計算されていることですが、表示されるのは一部の時間だけです。

何か助けはありますか?私が経験していることを示すスクリーンショットへのリンクは以下のとおりです(はい、昨夜の議論を見ていました)

拡大縮小されていない画像

正しく拡大縮小された画像

ありがとう!

4

3 に答える 3

27

私は同じ問題に遭遇します。そして、1時間の作業の後、私は何が起こったのかを理解しました!

問題は、UITableViewCell に既にimageView!!があることです。

に同じプロパティ名を使用すると、どういうわけか、システムは定義した を変更します。imageViewUIImageViewimageView

したがって、解決策はその名前imageViewを使用しないでください。他の名前を使用してみてください。

元:

@property (nonatomic, weak) UIImageView *myImageView;

少なくとも私のために働いてください。:)

于 2013-01-08T11:51:49.153 に答える
2

うまくいきました!これが唯一の方法かどうかはわかりませんが、実行時に UIImageView を作成し、XIB ファイル内のサイズを変更する代わりに手動でセルに追加する必要がありました。これがなぜなのか説明できる人はいますか?

ここに私が巻き上げたコードがあります:

CGRect imageFrame = CGRectMake(0,34, tableView.frame.size.width, imgHeight);
UIImageView *imgView = [[UIImageView alloc] initWithFrame:imageFrame];
[imgView setImage:img];
[cell addSubview:imgView];
于 2012-10-24T00:35:56.400 に答える
0

私が逃した別の答えは、IBを使用してUIImageViewの境界をコンテナセルの下部に結び付けていたと思います。当時はこれができるとは知りませんでしたが、友人がその方法を教えてくれたので、ここで言及したいと思いました。

于 2012-11-02T15:15:05.343 に答える