Eu precisava fazer o mesmo conceito de ter UITableCells com um "espaço" entre eles. Como você não pode literalmente adicionar espaço entre as células, pode falsificá-lo, manipulando a altura da célula do UITableView e adicionando uma UIView ao contentView da sua célula. Aqui está uma captura de tela de um protótipo que fiz em outro projeto de teste quando simulava isso:
Aqui está um código (Nota: existem muitos valores codificados para fins de demonstração)
Primeiro, eu precisava definir o heightForRowAtIndexPath
para permitir diferentes alturas no UITableViewCell.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *text = [self.newsArray objectAtIndex:[indexPath row]];
if ([text isEqual:@"December 2012"])
{
return 25.0;
}
return 80.0;
}
Em seguida, quero manipular a aparência do UITableViewCells para fazer isso no willDisplayCell:(NewsUITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
método
- (void)tableView:(UITableView *)tableView willDisplayCell:(NewsUITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (cell.IsMonth)
{
UIImageView *av = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 20, 20)];
av.backgroundColor = [UIColor clearColor];
av.opaque = NO;
av.image = [UIImage imageNamed:@"month-bar-bkgd.png"];
UILabel *monthTextLabel = [[UILabel alloc] init];
CGFloat font = 11.0f;
monthTextLabel.font = [BVFont HelveticaNeue:&font];
cell.backgroundView = av;
cell.textLabel.font = [BVFont HelveticaNeue:&font];
cell.textLabel.textColor = [BVFont WebGrey];
}
if (indexPath.row != 0)
{
cell.contentView.backgroundColor = [UIColor clearColor];
UIView *whiteRoundedCornerView = [[UIView alloc] initWithFrame:CGRectMake(10,10,300,70)];
whiteRoundedCornerView.backgroundColor = [UIColor whiteColor];
whiteRoundedCornerView.layer.masksToBounds = NO;
whiteRoundedCornerView.layer.cornerRadius = 3.0;
whiteRoundedCornerView.layer.shadowOffset = CGSizeMake(-1, 1);
whiteRoundedCornerView.layer.shadowOpacity = 0.5;
[cell.contentView addSubview:whiteRoundedCornerView];
[cell.contentView sendSubviewToBack:whiteRoundedCornerView];
}
}
Observe que eu criei minha altura whiteRoundedCornerView 70.0 e é isso que causa o espaço simulado porque a altura da célula é realmente 80.0, mas meu contentView é 70.0, o que lhe dá a aparência.
Pode haver outras maneiras de conseguir isso ainda melhor, mas é exatamente como eu descobri como fazê-lo. Espero que possa ajudar outra pessoa.