3

UIImageViewののに画像を設定しようとしてSimpleTableCellUITableViewます。イメージビューのサイズを変更しましたが、イメージを設定しようとすると、自動的にサイズが変更されます。ここのコードを使用して、画像のサイズを変更して設定してみました。ただし、画像のサイズを (40x40) のサイズの半分である (20x20) に設定した場合にのみ機能しUIImageViewます。なのでボケて出ます。と も設定UIAspectRatioFit/UIAspectratioFillしてみclipsToBounds = YESました。何も機能していないようです。

別の奇妙な部分は、次のimageViewように Web から直接ダウンロードした画像を使用すると、サイズが変更されないことです。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *userImage = [UIImage imageWithData:userImageData scale:self.profileImage.frame.size.height/self.profileImage.frame.size.width];

    UITableViewCell *cell = [self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

    cell.imageView.image = userImage;
}

しかし、この画像をドキュメントディレクトリに保存してから、別の場所にリロードしようとすると、サイズ変更が発生します。解決策はありますか?

4

2 に答える 2

14

あなたの SimpleTableCell はUITableViewCellあなたが作成したサブクラスですか? このimageViewはこのサブクラスのプロパティですか?

推測:

すべての UITableViewCell には、組み込みの imageView 読み取り専用プロパティがあります。あなたが投稿したコードでは、このデフォルトのプロパティを使用しています。これは、フレームを変更することはできず、セルの左側に固定されているようです。

ドキュメント内の imageView プロパティを探します: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/index.html#//apple_ref/occ/instp/UITableViewCell/imageView

そのため、独自の imageView を持つカスタム セルがある場合は、それも呼び出さないようにしてください。これは、フレームのカスタマイズなどをすべて含む独自のプロパティではなく、imageViewデフォルトのプロパティを使用して終了する可能性があるためです。UITableViewCell

customClass でセルを参照し、次のようにプロパティを呼び出す必要があります。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *userImage = [UIImage imageWithData:userImageData scale:self.profileImage.frame.size.height/self.profileImage.frame.size.width];

    SimpleTableCell *cell = (SimpleTableCell*)[self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

    cell.myImageView.image = userImage;
}

問題が本当にこれに関連しているかどうかわからないので、それが役に立ったかどうか教えてください.

于 2013-08-08T15:18:43.297 に答える
1

奇妙なサイズ変更動作が発生した場合、最初に疑うのは Autolayout です。Autolayout をオフにしてみて、サイズ変更がまだ行われるかどうかを確認してください。

  1. ストーリーボードまたは NIB で ViewController を選択します
  2. Xcode ウィンドウの右側にある [File Inspector] タブをクリックします。
  3. [Interface Builder Document] セクションで、[Use Autolayout] のチェックを外します。

Autolayout が必要な場合は、おそらくいくつかのコードで戦う必要があります。

于 2013-08-08T15:07:43.017 に答える