在我的例子中,我使用了我自己的继承自UITableViewCell
. 它非常干净且易于使用。此外,我可以使用不同大小的图像来调整此单元格的大小。关键是使用将替换常规的附加属性imageView
1:在子类中,我添加了一个mainImageView
可以用来代替imageView
.
@property (nonatomic, retain) UIImageView *mainImageView;
2:然后在- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
. 我分配并初始化了mainImageView
. 您可以为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];
}
4:在UITableDataSourceDelegate
方法中使用该单元格时,用于cell.mainImageView
接收消息,而不是常规的cell.imageView