Lorsque vous utilisez un UITableView
de style simple avec un nombre de cellules suffisamment important pour que le UITableView
ne puisse pas les afficher tous sans défilement, aucun séparateur n'apparaît dans l'espace vide situé sous les cellules. Si je ne dispose que de quelques cellules, l’espace vide situé au-dessous d’elles comprend des séparateurs.
Est-il possible de forcer une UITableView
à supprimer les séparateurs de l'espace vide? Sinon, je devrais charger un arrière-plan personnalisé avec un séparateur dessiné pour chaque cellule, ce qui rendra plus difficile l'héritage du comportement.
J'ai trouvé une question un peu similaire ici , mais je ne peux pas utiliser un UITableView
groupé dans mon implémentation.
Vous pouvez obtenir ce que vous voulez en définissant un pied de page pour la vue de table. Voir cette réponse pour plus de détails: Éliminer les séparateurs supplémentaires sous UITableView
La méthode la plus simple consiste à définir la propriété tableFooterView
:
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}
Vous pouvez ajouter ceci à votre TableViewController (cela fonctionnera pour n'importe quel nombre de sections):
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
et si cela ne suffit pas, ajoutez le code suivant trop:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView() // it's just 1 line, awesome!
}
En utilisant le lien de Daniel, j'ai fait une extension pour la rendre plus utilisable:
//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
[v release];
}
Après quelques tests, j'ai découvert que la taille pouvait être 0 et que ça fonctionnait aussi. Cela n’ajoute donc pas de marge au bout de la table. Alors merci wkw pour ce hack. J'ai décidé de poster ça ici car je n'aime pas la redirection.
Swift Version
La méthode la plus simple consiste à définir la propriété tableFooterView:
override func viewDidLoad() {
super.viewDidLoad()
// This will remove extra separators from tableview
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
Pour Swift:
self.tableView.tableFooterView = UIView(frame: CGRectZero)
Si vous utilisez iOS 7 SDK, la procédure est très simple.
Ajoutez simplement cette ligne dans votre méthode viewDidLoad:
self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Régler le separatorStyle
de la table sur UITableViewCellSeparatorStyleNone
(en code ou en IB) devrait suffire.
J'utilise les éléments suivants:
UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];
Le faire dans viewDidLoad. Mais vous pouvez le définir n'importe où.
Ce qui suit a très bien fonctionné pour moi pour ce problème:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
CGRect frame = [self.view frame];
frame.size.height = frame.size.height - (kTableRowHeight * numberOfRowsInTable);
UIView *footerView = [[UIView alloc] initWithFrame:frame];
return footerView; }
Où kTableRowHeight est la hauteur de mes cellules de ligne et numberOfRowsInTable est le nombre de lignes que j'avais dans la table.
J'espère que ça t'as aidé,
Brenton.