У меня была похожая проблема, и ни один из ответов, казалось, не подходил для моего случая.
В этом случае все мои ряды имеют одинаковую высоту, но с некоторой математикой это можно адаптировать для размещения рядов с разной высотой.
Я установил высоту в моем контроллере, используя метод UITableViewDelegate. У меня на контроллере есть переменная экземпляра cellBackgroundImage
, которая является UIImage
, которая будет использоваться для фона UITableViewCell
. Фон UITableView
установлен на [UIColor clearColor]
.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return cellBackgroundImage.size.height + SPACING_HEIGHT;
}
Где SPACING_HEIGHT - постоянная #define для высоты зазора.
Тогда уловка заключалась в том, чтобы использовать UIView
, который обернул бы UIImageView
, который будет фоном ячейки. Я сделал это, выполнив:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ContentCell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"ContentCell"] autorelease];
CGFloat height = [self tableView:tableView heightForRowAtIndexPath:indexPath];
cell.frame = CGRectMake(0, 0, [UIScreen mainScreen].applicationFrame.size.width, height);
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIView *backView = [[UIView alloc] initWithFrame:CGRectInset(cell.frame, 0, 0)];
UIImageView *imageView = [[UIImageView alloc] initWithImage:cellBackgroundImage];
[backView insertSubview:imageView atIndex:0];
cell.backgroundView = backView;
[backView release];
[imageView release];
}
return cell;
}
Затем, установив cell.backgroundView = backView
на UIView
с UIImageView
, который содержит мой фон, мне удалось добиться эффекта разрыва между строками.
Надеюсь, это поможет.