14

私はウェブキャッシュを使用してFacebookユーザーのリストを読み込んでいますが、それは素晴らしく機能します。セルの1つを選択するまで、コンテンツモードが変更されるか、uiimageviewフレームのサイズが変更される可能性が高くなりますが、画像の実際のサイズに基づいています。わかりやすくするために、ここにいくつかの画面があります

ここにロードされ ますhttp://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114807.png

ご覧のとおり、一部の画像を選択すると、元の外観にジャンプしているように見えます。 http://img.photobucket.com/albums/v246/homojedi/Screenshot20120727114827.png

予想どおり、画面からスクロールして元に戻すと、最初の状態に戻ります。

それは困惑しています。私が試みていない唯一のことは、uitableViewをサブクラス化し、そこにそのレイアウトサブビューを設定することです。それ以外に私にできることはありますか?

編集:要求されたコード

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // typically you need know which item the user has selected.
    // this method allows you to keep track of the selection
    _indexPath = indexPath;

    [_indexPath retain];
}
4

10 に答える 10

57

私はあなたとまったく同じ問題に直面しました、そして私は修正します

この問題は、imageViewに「imageView」という名前を付けたことが原因です。

どうしてか分かりません。

「m_imageView」のようにimageView名を変更した場合

問題が修正されました

ネーミングがすべてです!

于 2013-06-15T11:54:43.773 に答える
19

imageViewこの問題が発生しましたが、カスタムUITableViewCell内にプロパティがありません。

実際、imageViewオブジェクトからUITableViewCellのデフォルトプロパティに追加のIBOutletを接続することで、ばかげた間違いを犯しました。imageView最初は画像ビューimageViewに名前を付けたのですが、変更してコンセントを忘れてしまいました。

追加のコンセント

コンセントを取り外した後は、すべて正常に動作します。

于 2015-07-16T03:40:25.783 に答える
7

私のような他の誰かがこの問題に遭遇した場合に備えて、上記のいずれも機能しませんでした。

私も自分の名前を付けましたUIImageViewimageViewしかし、何らかの理由で、名前を変更した後でも、問題は解決しませんでした。考えられるすべてのことを試しました。シミュレーターのリセット、プロジェクトのクリーンアップ、制約の削除の追加などです。

結局のところ、ストーリーボードからを削除し、新しいUIImageViewストーリーボードをドラッグするだけで修正されました。

プロジェクトをクリーンアップしたため、プリコンパイルされた問題ではなかった可能性があります。図に行きます。

于 2014-07-04T16:00:31.190 に答える
2

私はこの問題を抱えていました、そして私はそれを解決しました!!!

カスタムTableViewCellでimageViewプロパティを合成したことを確認してください。

プロパティを合成するのを忘れました(IBOutletのゲッター/セッターがありません)。

このトピックは古いですが、他の誰かに役立つことを願っています!

于 2012-12-31T04:16:49.760 に答える
2
// reason for this problem is UITableView cell's imageview initially has a default size later on it resize it self on select so following cab be a solution for this: (Using AFNetworking to set image/ You can adjust accordingly)

            __weak UItableViewCell *cellTemp = cell;

            [cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strURL]]
                                  placeholderImage:[UIImage imageNamed:@"placeholder"]
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
            {
                cellTemp.imageView.image = image;

                CGRect frameRect = cellTemp.imageView.frame;
                frameRect.origin.y = (cellTemp.frame.size.height - image.size.height)/2;
                frameRect.size.width = image.size.width;
                frameRect.size.height = image.size.height;
                cellTemp.imageView.frame = frameRect;

                [cellTemp layoutSubviews]; 
    // this will fit your cell's label

            }
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
            {

            }];
于 2015-05-20T06:51:32.067 に答える
1

あなたの問題はUIImageViewが原因だと思います。画像を一度設定する必要があります--cell.imageView.image=myImage。ハイライトされた画像を設定しないでください。画像のアスペクト比を維持するようにcontentModeを設定します:cell.imageView.contentMode = UIViewContentModeScaleAspectFit;そして、contentStretch rectが0,0,1,1(デフォルト)であることを確認します。

tableViewが選択されたときにUIImageViewまたはそのフレームのcontentModeを変更している可能性があります(理由を知っている人のために)。willSelectRowAtIndexPathとdidSelectRowAtIndexPathの両方にNSLogを追加して、同じ情報(imageViewフレーム、contentMode値(整数)など)を表示します。どういうわけか、これらの値の1つ以上が選択時に変更されます。

于 2012-07-27T12:17:58.777 に答える
1

命名の問題に関する回答に追加する:

すでに述べたように、画像ビューの問題は、名前を変更した後も解決しません。UIImageViewただし、xibまたはストーリーボードからを削除する必要はありません。画像ビューをCtrlキーを押しながらクリックしてimageView、まだ存在しているプロパティへの接続を削除するだけです。

リンクがまだ存在する理由は、コードでプロパティを削除した後もプロパティが引き続き使用可能imageViewであるためと思われます。imageViewから継承されているため、まだ存在していUITableViewCellます。

ばかげているように聞こえますが、気付くのに数分かかった最後のヒント:明らかに、プロパティ名imageViewを使用するすべてのコードは引き続き機能しますが、奇妙な動作になります。したがって、古いプロパティ名を使用してコードが残っていないかどうかを再確認してください。

于 2014-11-04T08:28:03.590 に答える
1

私は同じ問題を抱えていました、そして以前のすべての答えを試した後でさえ、それらのどれもうまくいきませんでした。後で、UITableViewControllerに未使用のアウトレットが複数あることがわかったので、未使用のアウトレットを削除すると問題が修正されました。

于 2015-10-09T12:43:06.037 に答える
0

sebastian-Luczakの要求に応じて、サイズ変更の解決策を考え出しましたが、画質に一貫性がないため、触れたときにのみ高解像度になります。奇妙ですが、それほど悪くはなく、目立たないものです。とにかくここにコードがあります。

注意:SDWebImageを使用して画像を非同期でロードしています

[cell.imageView setImageWithURL:[NSURL URLWithString:path] placeholderImage:[UIImage imageNamed:@"Icon.png"]success:^(UIImage *image) 
 {
     cell.imageView.image = [image resizeImage:image newSize:CGSizeMake(38, 38)];

 } failure:^(NSError *error) 
 {

 }];
于 2012-08-09T04:32:32.467 に答える
0

// UITableViewCellをサブクラス化すると、この問題を取り除くことができます

- (void)layoutSubviews {

    [super layoutSubviews];
    self.imageView.bounds = CGRectMake(10,5,65,65);
    self.imageView.frame = CGRectMake(10,5,65,65);
    self.imageView.contentMode = UIViewContentModeScaleAspectFit;

}
于 2013-04-18T21:45:35.003 に答える