Je personnalise un fichier UITableView
. Je veux masquer la ligne séparant la dernière cellule ... puis-je faire cela?
Je sais que je peux le faire tableView.separatorStyle = UITableViewCellStyle.None
mais cela affecterait toutes les cellules de la tableView. Je veux que cela n'affecte que ma dernière cellule.
Réponses:
dans
viewDidLoad
, ajoutez cette ligne:et dans
cellForRowAtIndexPath
:pour les versions inférieures d'iOS
pour les versions supérieures d'iOS 7 (y compris iOS 8)
la source
[cell.contentView addSubview:line]
place de[cell addSubview:line]
cellForRowAtIndexPath
. N'oubliez pas que les cellules sont réutilisées. Chaque fois que cette cellule est réutilisée, vous ajoutez une autre vue de ligne de séparation. Sur les grandes listes, cela peut affecter les performances de défilement. Et ce n'est tout simplement pas la bonne façon de procéder.Vous pouvez utiliser le code suivant:
Rapide :
ou :
pour la marge par défaut:
pour montrer le séparateur de bout en bout
Objectif c:
la source
UITableView
, contrairement à la réponse acceptée.self.tableView.separatorColor = [UIColor clearColor];
résolu le problème .cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
si je ne soustrais pas la valeur cell.layoutMargins.left, la ligne de séparation est tracée de la bordure gauche à la marge gauche (si vous en avez).textLabel
écran.Pour donner suite à la réponse d' Hiren .
dans ViewDidLoad et la ligne suivante:
Ou, si vous utilisez XIB ou Storyboards, changez " separator " en " none ":
Et dans CellForRowAtIndexPath, ajoutez ceci:
Voici un exemple du résultat où j'affiche une table avec des cellules dynamiques (mais n'en ai qu'une seule avec son contenu). Le résultat étant que seul celui-ci a un séparateur et pas tous les "factices" ajoutent automatiquement la table pour remplir l'écran.
J'espère que cela t'aides.
EDIT: Pour ceux qui ne lisent pas toujours les commentaires, il y a en fait une meilleure façon de le faire avec quelques lignes de code:
la source
Si vous ne voulez pas dessiner le séparateur vous-même, utilisez ceci:
Cette API n'est cependant disponible qu'à partir d'iOS 7.
la source
separatorInset
semble insérer le contenu des cellules ainsi que le séparateur, nécessitant un autre hack pour compenser:cell.IndentationWidth = -10000;
separatorInset
0 pour le haut, la gauche et le bas et la largeur de la cellule pour la droite:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
cela évite d'avoir à ajuster les autres propriétés de la cellule.mon environnement de développement est
les réponses ci-dessus ne fonctionnent pas pleinement pour moi
après essai, ma solution finalement fonctionnelle est:
et l'effet est:
la source
Installez-
separatorInset.right = .greatestFiniteMagnitude
vous sur votre portable.la source
awakeFromNib
peut faire clignoter tout l'écranapplicationDidBecomeActive
Dans Swift 3, Swift 4 et Swift 5 , vous pouvez écrire une extension pour UITableViewCell comme ceci:
Ensuite, vous pouvez utiliser ceci comme ci-dessous (lorsque la cellule est votre instance de cellule):
Il est vraiment préférable d'attribuer la largeur de la cellule de la vue de table comme encart gauche au lieu de lui attribuer un nombre aléatoire. Parce que dans certaines dimensions d'écran, peut-être pas maintenant, mais à l'avenir, vos séparateurs peuvent toujours être visibles car ce nombre aléatoire peut ne pas être suffisant. De plus, dans l'iPad en mode paysage, vous ne pouvez pas garantir que vos séparateurs seront toujours invisibles.
la source
Meilleure solution pour iOS 7 et 8
Si votre application est rotative - utilisez 3000.0f pour la constante d'encart gauche ou calculez-la à la volée. Si vous essayez de définir l'encart droit, vous avez une partie visible du séparateur sur le côté gauche de la cellule sur iOS 8.
la source
Dans iOS 7, le séparateur de cellules de style groupé UITableView est un peu différent. Cela ressemble un peu à ceci:
J'ai essayé la réponse de Kemenaran de faire ceci:
Mais cela ne semble pas fonctionner pour moi. Je ne sais pas pourquoi. J'ai donc décidé d'utiliser la réponse de Hiren , mais en utilisant à la
UIView
place deUIImageView
, et trace la ligne dans le style iOS 7:Si vous l'utilisez, assurez-vous de brancher la hauteur de vue de table correcte dans la seconde instruction if. J'espère que cela est utile pour quelqu'un.
la source
Dans votre sous-classe UITableViewCell, remplacez layoutSubviews et masquez _UITableViewCellSeparatorView. Fonctionne sous iOS 10.
la source
Je ne pense pas que cette approche fonctionnera en aucun cas avec des cellules dynamiques ...
Peu importe la méthode de visualisation de table dans laquelle vous le faites pour les cellules dynamiques, la cellule sur laquelle vous avez modifié la propriété en incrustation aura toujours la propriété en incrustation définie à chaque fois qu'elle est retirée de la file d'attente, ce qui provoque un déchaînement de séparateurs de ligne manquants ... jusqu'à ce que vous changez-le vous-même.
Quelque chose comme ça a fonctionné pour moi:
De cette façon, vous mettez à jour l'état de la structure de vos données à chaque chargement
la source
Dans Swift avec iOS 8.4 :
Remarque: cet extrait ci-dessus fonctionnera sur UITableView à l'aide de cellules dynamiques. Le seul problème que vous pouvez rencontrer est lorsque vous utilisez des cellules statiques avec des catégories, un type de séparateur différent de aucun et un style groupé pour la vue de table. En fait, dans ce cas particulier, il ne masquera pas la dernière cellule de chaque catégorie. Pour surmonter cela, la solution que j'ai trouvée était de définir le séparateur de cellules (via IB) sur aucun, puis de créer et d'ajouter manuellement (via le code) votre vue de ligne à chaque cellule. Pour un exemple, veuillez consulter l'extrait ci-dessous:
la source
Utilisez cette sous-classe, l'ensemble
separatorInset
ne fonctionne pas pour iOS 9.2.1, le contenu serait compressé.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
la source
Le plus simple et logique est de le faire:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
Dans la plupart des cas, vous ne voulez pas voir uniquement le dernier séparateur tableCiewCell. Et cette approche ne supprime que le dernier séparateur tableViewCell, et vous n'avez pas besoin de penser aux problèmes de mise en page automatique (c'est-à-dire le périphérique rotatif) ou aux valeurs de code fixe pour configurer des insertions de séparateur.
la source
Dans
willdisplaycell
:la source
En utilisant Swift 3 et en adoptant la méthode de piratage la plus rapide, vous pouvez améliorer le code à l'aide d' extensions :
Ensuite, lorsque vous configurez la cellule:
la source
la source
La meilleure façon d'y parvenir est de désactiver les séparateurs de ligne par défaut, la sous
UITableViewCell
- classe et d'ajouter un séparateur de ligne personnalisé en tant que sous-vue ducontentView
- voir ci-dessous une cellule personnalisée qui est utilisée pour présenter un objet de typeSNStock
qui a deux propriétés de chaîne,ticker
etname
:Pour désactiver l'utilisation du séparateur de ligne par défaut,
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
. Le côté consommateur est relativement simple, voir l'exemple ci-dessous:la source
Pour Swift 2:
ajoutez la ligne suivante à
viewDidLoad()
:la source
si la réponse acceptée ne fonctionne pas, vous pouvez essayer ceci:
C'est bien ;)
la source
Essayez le code ci-dessous, pourrait vous aider à résoudre votre problème
la source
la source
Vous devez prendre une cellule personnalisée et ajouter une étiquette et définir une contrainte telle que l'étiquette doit couvrir toute la zone de la cellule. et écrivez la ligne ci-dessous dans le constructeur.
Définissez également la marge de mise en page UITableView comme suit
la source
Je n'ai pas pu masquer le séparateur sur une cellule spécifique, sauf en utilisant la solution de contournement suivante
la source
Pour iOS7 et supérieur, la méthode la plus propre consiste à utiliser INFINITY au lieu d'une valeur codée en dur. Vous n'avez pas à vous soucier de mettre à jour la cellule lorsque l'écran tourne.
la source
Comme (beaucoup) d'autres l'ont souligné, vous pouvez facilement masquer tous les séparateurs UITableViewCell en les désactivant simplement pour l'ensemble de UITableView lui-même; par exemple dans votre UITableViewController
Malheureusement, c'est un vrai PITA à faire sur une cellule , c'est ce que vous demandez vraiment.
Personnellement, j'ai essayé de nombreuses permutations pour changer le
cell.separatorInset.left
, encore une fois, comme (beaucoup) d'autres l'ont suggéré, mais le problème est, pour citer Apple ( souligne):" ... Vous pouvez utiliser cette propriété pour ajouter de l'espace entre le contenu de la cellule actuelle et les bords gauche et droit du tableau. Les valeurs d'encart positives déplacent le contenu et le séparateur de cellule vers l'intérieur et loin des bords du tableau ... "
Donc, si vous essayez de «masquer» le séparateur en le poussant hors écran vers la droite, vous pouvez également finir par indenter le contenu de votre cellule. Comme suggéré par crifan, vous pouvez ensuite essayer de compenser cet effet secondaire désagréable en réglant
cell.indentationWidth
etcell.indentationLevel
en déplaçant tout de manière appropriée, mais j'ai trouvé que cela n'était pas non plus fiable (le contenu est toujours en retrait ...).Le moyen le plus fiable que j'ai trouvé est de
layoutSubviews
contourner une simple sous-classe UITableViewCell et de définir l' encart droit pour qu'il frappe l'encart gauche, ce qui rend le séparateur de largeur 0 et donc invisible [cela doit être fait dans layoutSubviews pour automatiquement gérer les rotations]. J'ajoute également une méthode pratique à ma sous-classe pour l'activer.Mise en garde: il n'y a pas de moyen fiable de restaurer l' encart droit d' origine , vous ne pouvez donc pas `` masquer '' le séparateur, c'est pourquoi j'utilise une
hideSeparator
méthode irréversible (vs exposer separatorIsHidden). Veuillez noter que separatorInset persiste à travers les cellules réutilisées, donc, comme vous ne pouvez pas «dé-masquer», vous devez garder ces cellules de séparation cachées isolées dans leur propre réutilisationIdentifier.la source
Mon exigence était de cacher le séparateur entre la 4e et la 5e cellule. Je l'ai atteint en
la source
Rapide:
Objectif c:
la source
À l'intérieur de la classe de cellule tableview. mettre ces lignes de code
la source
Sur iOS9, j'ai eu le problème que le changement des insertions de séparateur affecte également le positionnement du texte et de l'étiquette de détail.
Je l'ai résolu avec ça
la source