У меня есть UITableView, заполненный пользовательскими ячейками.
Я создал тип StripTableViewCell с UIImageVIew.
@interface StripTableViewCell : UITableViewCell {
IBOutlet UIImageView *strip;
}
@property (nonatomic, retain) UIImageView *strip;
@end
StripTableViewCell инициализируется с новым UIImageView:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code.
strip = [[UIImageView alloc] init];
[self.contentView addSubview:strip];
}
return self;
}
ContentMode для UIImageView установлен в UIViewContentModeScaleAspectFill; чтобы изображение соответствовало ширине ячейки.
- (void)layoutSubviews {
[super layoutSubviews];
strip.contentMode = UIViewContentModeScaleAspectFill;
CGRect contentRect = self.contentView.bounds;
CGRect frame;
frame= CGRectMake(0, 0, contentRect.size.width, contentRect.size.height);
strip.frame = frame;
}
Ячейка заполнена так:
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"StripCell";
StripTableViewCell *cell = (StripTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[StripTableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
NSInteger row = [indexPath row];
Strip *strip = [self.stripsArray objectAtIndex:row];
UIImage *img = [[UIImage alloc] initWithData:strip.data];
cell.strip.image = [img autorelease];
return cell;
}
Изображения могут иметь разную высоту, поэтому мне придется подгонять высоту ячейки к высоте изображения.
Теперь моя проблема в том, что я хочу, чтобы высота ячейки соответствовала высоте изображения.
Я сделал снимок, найдя текущую ячейку и возвратив высоту изображения из этой ячейки, но она отображает совершенно неправильные размеры.
- (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath
{
StripTableViewCell *cell = (StripTableViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath];
UIImageView *picture = cell.strip;
return picture.bounds.size.height;
}
Мое приложение отображает только первое изображение и ячейку в неправильном размере.
Так что я думаю, что мой подход здесь несколько неправильный. Не могли бы вы, ребята, помочь мне в правильном направлении?
PS: Не обращайте внимания на управление памятью в приведенных выше примерах, они вырезаны из контекста.