Comment faire pour supprimer la dernière frontière de la dernière cellule dans UITableView?
Dans mon application, j'utilise une UITableView
Mon problème est que je veux supprimer la dernière frontière de la dernière cellule dans UITableView
.
Veuillez vérifier l'image suivante:
- Changement separatorInset comme dans cette réponse stackoverflow.com/a/8561820/1418457
Vous devez vous connecter pour publier un commentaire.
Mis à jour sur 9/14/15. Ma réponse originale à cette question de devenir obsolète, mais c'est toujours une solution universelle pour toutes les versions d'iOS:
Vous pouvez masquer
tableView
's standard ligne de séparation, et d'ajouter votre ligne personnalisés en haut de chaque cellule. La façon la plus simple pour ajouter un séparateur personnalisé est d'ajouter de la simpleUIView
de 1px de hauteur:À ce jour, je m'abonne à une autre façon pour cacher supplémentaire séparateurs en dessous de cellules (fonctionne pour iOS 6.1+):
La meilleure solution est d'ajouter un pied de page vue. Le code suivant cacher la dernière cellule de la ligne parfaitement:
Objective-C
Swift 4.0
if(indexPath.row == [self.tableView numberOfRowsInSection:indexPath.section] - 1) { self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)]; }
Dans leCellForRowAtIndexPath
source de données1.0f
que le pied de la hauteur dans-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
délégué. Maintenant, il fonctionne comme un charme. UpvotedDans iOS 7, il y a une solution plus facile. En supposant que la cellule est votre dernière cellule:
Cela fonctionne pour moi sous iOS 7 et 8:
REMARQUE: soyez prudent à propos de l'utilisation
tableView.bounds
comme c'est parfois des rapports de la bonne valeur en fonction de quand vous l'appelez. Voir Déclaration incorrecte limites en Mode paysagecell!.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(self.tableView.bounds)-self.view.layoutMargins.left)
Ajouter cette ligne de code dans
viewDidLoad()
.Assurez-vous que le dernier séparateur sera remplacé et remplacé (invisible) de pied de vue ne sera pas occuper toute la hauteur. Depuis le pied de vue de la largeur sera géré par
UITableView
, de sorte que vous pouvez régler à 0..zero
gauche un séparateur au bas de la table.CGRect
extension que vous avez ajouté est une grande pratique. Si vous n'aimez pas ces encombrants0
dans l'exemple de code, vous pouvez écrire quelque chose comme ceci:var frame = CGRect.zero \n frame.size.height = 0.001
.zero
, mais l'utilisation réelle zéro (0.001) qui font ce que vous avez besoin.CGRect.myZero
ne fournit pas beaucoup de sens de ce qu'il peut faire.almostZero
si c'est ce qu'il n'est pas flexible. Vous pouvez ajouter quelques commentaires au-dessus de lastatic let ...
pour la décrire (avec 3 / de sorte que vous serez en mesure de le voir via xCode de la saisie semi-automatique de l'interface).Ma version plus courte:
Ici est le remède que j'utilise actuellement. il pourrait ne pas être la meilleure approche, mais il fonctionne.
Supprimer SeparatorColor et setSeparatorStyle faire de la coutume séparateur
Ajouter un séparateur personnalisé pour chaque cellule avec tableview fond
Extension en fonction de la solution pour Swift 4, testé sur iOS 12
J'ai remarqué que la fixation d'une vue vide de
height = 1
supprime également le séparateur de la dernière cellule visible cependant réglageheight = 0
enlève juste le séparateur de cellules videsPour iOS 7 et au-dessus de
Dans Swift simplement:
UITableViewController
Code ci-dessous me permet de supprimer le séparateur de la dernière ligne dans une UITableView.
Swift 3.0
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) {
cell.separatorInset.right = cell.bounds.size.width
}
}
Trouver la dernière cellule d'indice dans le
cellForRow
délégué et de mettre la ligne de code ci-dessous:Une autre option est de sous-classement
UITableView
:L' .h ne doit contenir que des déclarations de propriété pour
hideLastSeparator
ethideLastSeparatorView
.Lorsque l'on veut cacher le séparateur, l'utilisation de la nouvelle classe et de définir
myTableView.hideLastSeparator = YES
.La façon dont cela fonctionne est par l'obstruction de la dernière séparateur par l'ajout d'un nouveau point de vue sur elle.
C'est un peu plus facile à utiliser, à mon avis (que d'utiliser un séparateur personnalisé, ou le réglage de la dernière separatorInset de la dernière cellule), et d'éviter certains bizarre animations que la méthode de réglage d'une
tableFooterView
provoque parfois (par exemple lors de la ligne d'insertion/délétion ou d'une autre table des animations).Swift 4.2
Pour obtenir un séparateur qui va de gauche à droite dans votre dernière cellule, ajouter ceci dans votre
UITableViewDataSource's
tableView(_:cellForRowAt:)
mise en œuvre:Si vous ne voulez pas d'un séparateur de cellules, pensez à tracer votre propre séparateur et de l'ensemble
tableView.separatorStyle = .none
.Expansion sur Tonny Xu réponse, j'ai plusieurs sections et cela semble fonctionner pour supprimer le dernier séparateur de cellules
Dans le
cellForRowAtIndexPath
source de donnéestableFooterView
existe pour l'ensemble de la table, et pas seulement pour la dernière cellule. Dans l'ensemble, hacky solution, et peut ne pas toujours fonctionner.