Выше используются ячейки, на которые вы обращаете внимание в своих комментариях, но; после нахождения кэшированной ячейки вы снова выполняете настройку, независимо от того, старая ячейка или новая.
UITableViewCell - это «двухчастный», при первой ссылке на ячейку она создается и создается, все последующие обращения к ней следует только обновлять. (на ячейку ссылаются каждый раз, когда она прокручивается на экран или перезагружается представление таблицы и т. д., это часто происходит, поэтому для экономии времени ЦП также лучше не выполнять одни и те же настройки снова и снова).
Итак, попробуйте подойти к этому так:
- (void) configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
UILabel *settingText = [ISInterfaceElement getLabel:Headline]; //Opps... ISInterfaceElement is my custom class. All it does is return a UILabel with settings that comply for a Headline label, according to an enum in the header.
[settingText setFrame:CGRectMake(0.0f, 15.0f, 320.0f, 20.0f)];
[settingText setTextAlignment:UITextAlignmentCenter];
[settingText setTag:SETTINGS_LABEL];
[cell addSubview:settingText];
UIView *background = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 50.0f)];
[cell addSubView:background]; //added
[background release]; //added
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
}
[(UILabel*)[cell viewWithTag:SETTINGS_LABEL] setText:@"Settings…"];
return cell;
}
Поэтому cellForRowAtIndexPath вызывает метод configureCell, если ему требуется новая настройка ячейки, иначе он просто
обновляет ячейку с правильным значением из модели (обычно [someArray objectAtIndex: indexPath.row], но в моем случае просто строка.
Итак, отправьте по любому параметру (высоте), который вам нужен метод configureCell, чтобы знать, как создать ячейку, и выполнить все построения в этом методе и все обновления в cellForRowAtIndex.
Надеюсь, это имеет смысл:)