web-dev-qa-db-fra.com

Puis-je forcer un UITableView à masquer le séparateur entre les cellules vides?

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.

209
jessecurry

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

118
Daniel Hepper

Pour iOS 7. * et iOS 6.1

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];
}

Pour les versions précédentes

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];
}
218
J. Costa

Pour Swift:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()  // it's just 1 line, awesome!
}
130
Sebastian

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.

67
Sauleil

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)
}
24
King-Wizard

Pour Swift:

self.tableView.tableFooterView = UIView(frame: CGRectZero)
11
Segev

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];
8
Salmo

Régler le separatorStyle de la table sur UITableViewCellSeparatorStyleNone (en code ou en IB) devrait suffire.

7
duncanwilcox

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ù.

5
Dare2Dream

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.

0
Callaghan001