231 votes

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

Lors de l'utilisation d'une UITableView avec un nombre de cellules suffisamment important pour que le UITableView ne peut pas les afficher toutes sans défilement, aucun séparateur n'apparaît dans l'espace vide sous les cellules. Si je n'ai que quelques cellules, l'espace vide sous celles-ci comprend des séparateurs.

Y a-t-il un moyen de forcer un UITableView pour enlever les séparateurs dans l'espace vide ? Sinon, je devrai 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 groupe UITableView dans ma mise en œuvre.

230voto

J. Costa Points 3776

Pour iOS 7.* et iOS 6.1

La méthode la plus simple consiste à définir l'option tableFooterView propriété :

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

128voto

Daniel Hepper Points 4992

Vous pouvez obtenir ce que vous voulez en définissant un pied de page pour le tableau. Voir cette réponse pour plus de détails : Éliminer les séparateurs supplémentaires sous UITableView

67voto

AngeDeLaMort Points 1375

En utilisant le lien de Daniel, j'ai fait une extension pour le 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 essais, j'ai découvert que la taille peut être de 0 et que cela fonctionne aussi bien. Ainsi, il n'ajoute pas une sorte de marge à la fin du tableau. Merci donc à wkw pour ce hack. J'ai décidé de le poster ici puisque je n'aime pas les redirections.

0 votes

Devez-vous également définir la couleur de l'arrière-plan ?

8voto

Salmo Points 494

Si vous utilisez le SDK iOS 7, c'est très simple.

Ajoutez simplement cette ligne dans votre méthode viewDidLoad :

self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

7voto

duncanwilcox Points 2923

Réglage de la table separatorStyle à UITableViewCellSeparatorStyleNone (dans le code ou dans l'IB) devrait faire l'affaire.

6 votes

Si je fais cela, je perdrai tous les séparateurs, ce qui n'est pas le comportement que je recherche. La vue tableau dessine automatiquement des séparateurs dans l'espace vide si le tableau n'a pas assez de cellules pour remplir un écran complet, mais s'il y a assez de cellules pour remplir un écran, aucun séparateur n'est dessiné dans l'espace vide sous la dernière cellule. I pourrait Je pourrais désactiver les séparateurs et me contenter d'utiliser un arrière-plan de cellule avec un séparateur dessiné, mais j'ajouterais alors une autre ressource à mon projet, ce qui pourrait rendre la mise à jour plus difficile à l'avenir.

0 votes

Je vois. Je ne pense pas que vous puissiez supprimer les séparateurs uniquement lorsqu'aucune cellule n'est présente. La seule autre solution simple qui me vient à l'esprit est de faire en sorte que votre classe de cellules hérite d'une sous-classe UITableViewCell très minimale qui ne dessine que la ligne de séparation. Il s'agit d'un élément de complexité supplémentaire, mais qui ne nécessite pas d'image séparée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X