J'ai une table avec un style simple et une seule section. J'ai implémenté un viewForHeaderInSection:
pour ajouter une vue personnalisée dans l'en-tête de section.
Je ne suis pas en mesure de voir une ligne de séparation entre ma vue d'en-tête de section de tableau et ma première cellule. [Voir l'image ci-jointe]
Qu'est-ce que je fais mal?
Les en-têtes et pieds de page personnalisés ne contiennent pas de séparateurs en dessous/au-dessus d'eux. Vous devrez implémenter le séparateur vous-même dans la vue personnalisée (ou basculer vers un style groupé, qui affichera le contour du groupe au-dessus et en dessous, même avec un en-tête/pied de page personnalisé).
Comme Jeremy le note dans sa réponse, iOS n'ajoute pas de séparateurs au-dessus/en dessous des en-têtes/pieds de page; vous pouvez simplement utiliser une UIView pour créer vous-même une ligne.
Voici le code pour ajouter une vue de séparation standard à une vue d'en-tête:
CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1);
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease];
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0];
[headerView addSubview:seperatorView];
Si vous essayez de la faire ressembler à une cellule de vue de table normale, vous devrez probablement en ajouter une en haut de la vue d'en-tête également.
si vous souhaitez donner de l'espace uniquement entre l'en-tête du tableau et la première ligne du tableau, vous pouvez utiliser
Dans la méthode de tableView:heightForHeaderInSection:(NSInteger)section
if(section ==0)
return 3; // (space u want to give between header and first row);
return 10; //(ur section header height)
Dans la méthode de tableView:viewForHeaderInSection:(NSInteger)section
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];
headerView.backgroundColor = [UIColor clearColor]; // use your own design
return headerView;
Ajoutez une ligne supplémentaire "masquée" à la section à laquelle vous souhaitez ajouter le séparateur en retournant +1
le nombre de lignes existant dans tableView:numberOfRowsInSection:
. Ajoutez ensuite la méthode suivante:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow )
return 0.f;
else
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
Si vous voulez que le séparateur soit en haut d'une section (après un en-tête), indexOfHiddenRow
sera 0
. Si vous le voulez au bas d'une section (avant un pied de page) ce sera [self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1
.
Maintenant à l'intérieur tableView:cellForRowAtIndexPath:
, renvoyez simplement [UITableViewCell new]
pour la ligne cachée (elle ne sera pas affichée, donc pas besoin de définir un cadre ou quoi que ce soit). Vous devrez peut-être faire quelques -1
ajustements d'index dans vos méthodes UITableViewDataSource
et UITableViewDelegate
, mais cela fonctionne (testé dans iOS 7), et garantit un style cohérent (pas besoin de dessiner le vôtre " faux "séparateur - c'est un vrai séparateur UITableView
dessiné par le système).
J'ai étendu UITableViewCell avec quelques méthodes de séparation (dans Swift). Avec eux, je peux ajouter des séparateurs aux en-têtes ou les supprimer des cellules normales. J'espère que cela peut aider certaines personnes.
public extension UITableViewCell
{
func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor)
{
let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7);
let seperatorView = UIView(frame: sepFrame);
seperatorView.backgroundColor = color;
self.addSubview(seperatorView);
}
public func addTopSeparator(tableView: UITableView)
{
let margin = tableView.separatorInset.left;
self.addSeparator(0, margin: margin, color: tableView.separatorColor!);
}
public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat)
{
let margin = tableView.separatorInset.left;
self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!);
}
public func removeSeparator(width: CGFloat)
{
self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0);
}
}
Ajoutez un séparateur entre la vue d'en-tête et la première ligne: - En vue d'en-tête dans la méthode déléguée de la section, ajoutez une sous-vue self.separator // @ propriété (non anatomique, forte) UIImageView * séparateur;
- (CGFloat)tableView:(UITableView *)tableView
heightForHeaderInSection:(NSInteger)section {
return 41;
}
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section {
self.headerView = [[UIView alloc] init];
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR];
self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]];
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1);
[self.headerView addSubview:self.separator];
return self.headerView;
}