Лучший способ сделать это, вероятно, устанавливать высоту каждый раз, когда вы получаете ячейку, а затем пересчитывать все внутренние кадры ячейки в этом установщике.Вот пример:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
float height = [self calcCellHeight:indexPath];
TextCell *textCell = (TextCell *)[tableView dequeueReusableCellWithIdentifier: @"AlwaysTheSame"];
if (textCell == nil) {
textCell = [[[TextCell alloc] init] autorelease];
}
[textCell setHeight: height];
return textCell;
}
Кроме того, обратите внимание, что вы забыли свой автоматический выпуск в первый раз.
// TextCell
- (id) init {
if ([super initWithStyle: UITableViewCellStyleDefault
reuseIdentifier: @"AlwaysTheSame"]) {
self.myInternalStuff = [[[MyInternalStuff alloc] initWithFrame: CGRectZero] autorelease];
// I don't know what size I am yet!
}
return self;
}
- (void) setHeight: (CGFloat) height {
self.myInternalStuff.frame = CGRectMake(0, 0, 100, height);
// I know what height I am now, so I can lay myself out!
}