web-dev-qa-db-ja.com

UITableViewCellのimageViewの配置

UITableViewのすべてのUITableViewCellで、imageViewに画像を配置しています。ただし、tableView:heightForRowAtIndexPath:を使用してセルの高さを増やしてより多くのテキストを収容すると、次のことがわかりました。

  1. 画像は垂直方向に中央揃えになっています。
  2. 画像の左マージンが大きくなります。これにより、テキストが右に押され、左マージンが上下のセルのテキストと整列しなくなります。

画像を垂直方向に上揃えにして、セルの左上隅に配置し(下の画像の最初のセルのように)、左マージンを大きくしないようにします(左マージンが2番目のセルのテキストは最初のセルのテキストと整列します)。

ImageViewのフレームや中央などを変更しても効果がないようです。何か案は?ありがとう...

(私は問題の画像を持っていますが、SO私は評判が10未満の初心者なので、まだ画像を投稿できません。Grrr...)

17
user511132

次のように、UITableViewCellをサブクラス化し、layoutSubviewsをオーバーライドする必要があります。

- (void) layoutSubviews
{   
    [super layoutSubviews];

    self.imageView.frame = CGRectMake( 10, 10, 50, 50 ); // your positioning here
}

CellForRowAtIndexPath:メソッドで、必ず新しいセルタイプのインスタンスを返します。

47
TomSwift

デフォルトのスタイルでアイテムのサイズや位置を調整する必要があると思った瞬間に、自分のアイテムを希望どおりのサイズと位置に配置してカスタムセルを作成することを検討する必要があります。これが、カスタムセルを作成できる理由です。 :)

6
jer

別の方法(iOS 6で機能)は、UIImageViewを作成し、それをサブビューとしてセルに追加することです。

 UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,20,20)];

[yourImageView setImage:[UIImage imageNamed:[imagesArray objectAtIndex:indexPath.row]]]; //You can have an Array with the name of 

[yourcell.contentView addSubview:yourImageView]; //add the imageView as a subview
4
Pach

UITableViewDelegateで)試したことがないかもしれない本当に便利な関数はtableView:willDisplayCell:forRowAtIndexPath:です。セルが表示される直前に呼び出され、その目的は、レイアウトに対して処理を実行できるようにすることですwithout OSは表示前にセルを再度変更します。事実上、完全に制御できます。セルのフォントを変更するために使用しましたが、セルのサブビューを繰り返し、フレームを変更することもできます。

それでも、カスタムセルを調べて、OSとの戦いをやめる時が来たと私は同意します。難しいことではありません。Appleは iOS用テーブルビュープログラミングガイド の良い例です。

1
Adam Eberbach

カスタムセルを作成し、オブジェクトを必要な場所に配置したり、自動マスク値を設定したりできます。

0
WrightsCS

TomSwiftのソリューションのSwift4バリエーション(これは私にとってうまく機能しました):

override public func layoutSubviews() {
        super.layoutSubviews()
        imageView?.frame = CGRect( x: 16, y: 9, width: imageView!.intrinsicContentSize.width, height:  imageView!.intrinsicContentSize.height)
    }
0