В моем случае я использовал свой собственный подкласс, унаследованный от 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