2012-07-24 2 views
5

EDIT:UIViewContentModeScaleモード(ハイライト)

私はカスタマイズセルを作成することにより、固定の問題を取得する(ただし、別のquestionsを持っている。)しかし、なぜデフォルトのセル。まだ謎です...

コーリーの答えは問題を解決しませんでしたが、clipsToBoundsは本当にポイントであり、私は彼の継続的な助けを感謝します。だから私は彼に恩恵を与えるが、答えとして彼の答えを受け入れない。まだ風に答え....

================================

私はセル画像のUIViewContentModeScaleモードをAspectFill(左の画像)に設定し、画像は正しく表示されました(画像ビューを塗りつぶしますが、アスペクトを維持します)。ただし、セルをタッチして押したままにすると、画像が変更されます。つまり、imageViewのframeとcontentViewModeが変更されます。 (下の左の画像の最初のセルを参照してください)

これは実際に配線されていて、基本的なことが間違っている可能性があるので、私は欠けていたものがあるはずです。

環境:Xcode 4.3 iOS5.1シミュレータ&デバイス。 enter image description here

UPDATE:

私は、ストーリーボードのインスペクタを使用してUIViewContentModeを設定します。

そして、私はSDWebImage/UIImageView + WebCache.hを使用しました。

アップデート2:

私は明示的にまだそこにコードが、問題の内容モードを設定します。 [cell.imageView setContentMode:UIViewContentModeScaleAspectFill];

update4:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell"]; 

    if(cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AlbumCell"]; 

    } 
    //[cell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    //[cell.imageView setClipsToBounds:YES]; 
    [self configureCell:cell atIndexPath:indexPath]; 
    return cell; 
} 
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    Album *album = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [album.title description];  
    cell.detailTextLabel.text = [self.userVisiableDateFormatter stringFromDate:album.releaseDate]; 


    //[cell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    [cell.imageView setImageWithURL:[NSURL URLWithString:album.coverThumbnailUrl] 
       placeholderImage:[self placeHolderImage]]; 

} 

enter image description here

+0

どのような方法でコンテンツモードを設定しますか?そのメソッドのソースを表示します。 –

+0

@rob私は、ストーリーボードから属性インスペクタを使用して属性を設定しました。 – pierrotlefou

+0

scaleToFillコンテンツモードを試してください – Mrunal

答えて

8

私が問題になるかもしれないさまざまな物事のカップルを見つけることができました。

まずそれがclipsToBoundsプロパティを設定してみてください:

img1.contentMode = UIViewContentModeScaleAspectFill; 
img1.clipsToBounds = YES; 

秒は次のとおりです。

あなたはこれらのモードの違いを見ない理由はUITableViewCellのが自動的に収まるように、画像ビューのサイズということです画像の縦横比。コンテンツモードは、ビューのアスペクト比が画像のアスペクト比と異なる場合にのみ発生します。

カスタムUITableViewCellクラスのlayoutSubviewsをオーバーライドするか、自分で画像ビューを作成するか(テーブルビューのセルが提供するものを使用しないでください)。

EDIT 1:

あなたのコードを見た後に問題はあなたがあなたのセル構成を処理する方法であるのかもしれません。彼らがしてはならないときにポインタが解放されるかもしれない。次の2つのオプションを試してみてください。

オプション1: 新しい方法に設定を渡す現在の方法を維持してください。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell"]; 

    if(cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AlbumCell"]; 

    } 

    return [self configureCell:cell atIndexPath:indexPath]; 
} 

- (UITableViewCell*)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* returnCell = cell; 

    Album *album = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    returnCell.textLabel.text = [album.title description];  
    returnCell.detailTextLabel.text = [self.userVisiableDateFormatter stringFromDate:album.releaseDate]; 


    [returnCell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    [returnCell.imageView setClipsToBounds:YES]; 

    [returnCell.imageView setImageWithURL:[NSURL URLWithString:album.coverThumbnailUrl] 
       placeholderImage:[self placeHolderImage]]; 

    return returnCell; 
} 

オプション2:(私の推薦) は、デリゲートメソッドでセルを構成します。ここでこれを行うのは大丈夫ですが、悪い習慣ではありません。これは、デリゲートメソッドは、セルを構成することです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell"]; 

    if(cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"AlbumCell"]; 

    } 


    Album *album = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    cell.textLabel.text = [album.title description];  
    cell.detailTextLabel.text = [self.userVisiableDateFormatter stringFromDate:album.releaseDate]; 

    [cell.imageView setContentMode:UIViewContentModeScaleAspectFill]; 
    [cell.imageView setClipsToBounds:YES]; 

    [cell.imageView setImageWithURL:[NSURL URLWithString:album.coverThumbnailUrl] 
       placeholderImage:[self placeHolderImage]]; 


    return cell; 
} 
+0

+1。しかし、私はclipstoBoundsをtrueに設定しましたが、問題はまだあります。 – pierrotlefou

+0

カスタムセルまたはデフォルトセルを使用していますか?問題の診断に役立つエラーを自分自身で再作成しようとしています。 – random

+0

私はデフォルトセルを使用していました。 – pierrotlefou

3

強調表示された状態でも同じイメージを設定します。

3

自動サイズ変更(用語を学んだことがある場合は、&スプリング)を設定する必要がある場合があります。私は、以下の画像のように私の自動サイズを設定している、あなたに似た左の画像でカスタムセルを持っているアプリで

:私はそれを持って

enter image description here

ノートサイズがセルフレーム内で一定のままであるように設定され、上下左右のサイズは、各側にその隙間を有するそれらの辺を抱かせるように命令される。

とは別に、私はあなたが正しいことを信じています。その設定のための選択肢は、選択肢です。 clipToBoundsは本当に重要ではありません。そのビューが、サイズがビューのサブビューであるビューより大きいところに現れるはずだった別のビューのサブビューだった場合にのみ必要です。

+0

ジョン、私は頑張ったが運がなかった。 – pierrotlefou

+0

また、私はこのためにカスタムセルを使用しています。それはしばらくしていますが、私は同様の問題を思い出しているようです。デフォルトのセルを使用して、必要に応じて上、下、左に「空白」を設定することができます。空白と特定の正方形の画像ビューを持つことに興味があるなら、あなたが望むものを保証するために同じことをしなければならないかもしれません。スペースで画像を埋めても構いませんが、最初の画像もスペースを埋めるようにしたい場合は、セル画像フィールドでより大きなデフォルト画像を使用する必要があります。とにかく、私のカスタムセルはとても簡単に作成できました。 –

2

サブクラス化されたUIIableViewCellと同様の問題が、サブクラス化されたUIImageViewプロパティで発生しました。このプロパティの名前を 'imageView'から別のものに変更すると、私の問題が解決されました。

+1

ありがとう!私のためにこの問題を解決しました! – schirrmacher