私の場合、から継承された独自のサブクラスを使用しましたUITableViewCell
。とても清潔で使いやすいです。また、さまざまなサイズの画像を使用して、このセルのサイズを適切に変更することもできます。ポイントは、通常の代わりに追加のプロパティを使用することですimageView
1:サブクラスに、のmainImageView
代わりに使用できるプロパティを追加しましたimageView
。
@property (nonatomic, retain) UIImageView *mainImageView;
2:次に- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
。を割り当てて初期化しmainImageView
ました。には任意のframe(rect)を設定できますmainImageView
。にサブビューとして追加しcontentView
ます。私はinsetImageView
それを`contentView'の垂直方向の中央に揃えていました。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code.
mainImageView = [[UIImageView alloc] initWithFrame:frameCellMainImageView];
[self.contentView addSubview:mainImageView];
insetImageView = (sizeRowHeightTwoLinedDetail - frameCellMainImageView.size.height) / 2.0;
}
return self;
}
3:オーバーライド- (void)layoutSubviews
して、などの他のプロパティを確認し、追加されたプロパティでフレームが適切に配置されるようtextLabel
に設定しますdetailTextLabel
mainImageView
- (void)layoutSubviews {
[super layoutSubviews];
CGRect frameImageView = frameCellMainImageView;
frameImageView.origin.x = insetImageView;
frameImageView.origin.y = insetImageView;
[self.mainImageView setFrame:frameImageView];
// Use changed frame
frameImageView = self.mainImageView.frame;
CGFloat newLeftInset = frameImageView.size.width + insetImageView;
CGRect frameTextLabel = self.textLabel.frame;
CGRect frameDetailLabel = self.detailTextLabel.frame;
frameTextLabel.origin.x += newLeftInset;
frameDetailLabel.origin.x += newLeftInset;
CGFloat newTextWidth = 320.0;
newTextWidth -= newLeftInset;
newTextWidth -= insetImageView;
newTextWidth -= insetImageView;
frameTextLabel.size.width = newTextWidth;
frameDetailLabel.size.width = newTextWidth;
[self.textLabel setFrame:frameTextLabel];
[self.detailTextLabel setFrame:frameDetailLabel];
}
UITableDataSourceDelegate
4:メソッドでこのセルを使用cell.mainImageView
する場合、通常の代わりにメッセージの受信に使用しますcell.imageView