2016-03-28 3 views
0

私はカスタムテーブルビューを持ち、各セルの下に私は画像ビューを持っています。私はサービスとは異なるサイズの画像を受信して​​おり、それに応じてフレームを調整したい。カスタムテーブルビューのセルでUIImageviewを調整する方法

フレームサイズより小さい画像があるときはいつも、その高さに応じて高さを調整したいと思います。

enter image description here

は、だから私は、現在のフレームサイズと画像サイズを比較し、ImageViewのフレームを更新しようとしているが、その動作していないのです。

cell.image.contentMode = UIViewContentModeScaleAspectFit; 
     if(cell.image.image.size.height<cell.image.frame.size.height) 
     { 
     cell.image.frame = CGRectMake(cell.image.frame.origin.x, cell.image.frame.origin.y,cell.image.frame.size.width, cell.image.image.size.height); 
     } 

問題を解決するために何が必要なのですか?

答えて

0

あなたは、包みなさい、あなたがイメージしていないテーブルビューセルのサイズを変更するために外を見ている、これらは非常に良いResize UIImage with aspect ratio?Resize UIImage with aspect ratio?あるこの

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (image.size.width > CGRectGetWidth(self.view.bounds)) { 
    CGFloat ratio = image.size.height/image.size.width; 
    return CGRectGetWidth(self.view.bounds) * ratio; 
    } else { 
    return image.size.height; 
    } 
} 

EDIT ようのUITableViewのデータソースに画像に応じてセルの高さを変更することが必要となります参照。また、あなたが理解する必要がありますUIImageView Scaling Explained Visually

+0

私はcellForRowAtIndexPathの下で何もする必要はありませんか? @ aman.sood – Fay007

+0

はい、あなたのUIImageViewにイメージを設定します。また、カスタムセルxibをチェックしてください - >モードセット、それは –

+0

を記入してスケールする必要がありますが、私に例外を与えるheightForRowAtIndexPathのセルオブジェクトを宣言する – Fay007

0

上記のコードがcellForRowAtIndexPathにあり、cellForRowAtIndexPath内で初期化したセルがItemCell(たとえば)のインスタンスである場合、ItemCellクラスではlayoutSubviewsをオーバーライドしてイメージのサブビューのサイズを確認する必要がありますlayoutSubviews内でそれに応じてセルのフレームの高さを調整します。これにより、cellForRowAtIndexPathが呼び出されるたびに、cellForRowAtIndexPathによってセルがレンダリングされる前に、UITableViewCellサブクラス(ItemCell)のレイアウトが確実に行われます。

Btwの場合、セルのcontentModeをScaleAspectFitに設定したということは、セル内のimageViewのフレームに関係なく、画像は常に使用可能なビュー全体に合わせてスケーリングされることを意味しますつまり、この場合、セル内のimageViewの大きさです。あなたが上書きされていない場合

if(cell.image.image.size.height<cell.image.frame.size.height) 
    { 
    cell.image.frame = CGRectMake(cell.image.frame.origin.x, cell.image.frame.origin.y,cell.image.frame.size.width, cell.image.image.size.height); 
    } 
cell.image.contentMode = UIViewContentModeScaleAspectFit; 

勿論、これはおそらく問題は解決しないでしょう。たぶん、あなたはImageViewののフレームサイズを設定する場所の条件後contentModeライン

cell.image.contentMode = UIViewContentModeScaleAspectFit; 

を動かしてみてくださいlayoutSubviewを使用して、そこにあるimageViewフレームのサイズを調整します。

+0

はい内部cellForRowAtlndexPath、私はそのレイアウトをオーバーライドする方法を教えてくださいできますか? @Das – Fay007

関連する問題