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
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
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.
@interface MyTableViewCellSubclass()
@property BOOL separatorIsHidden;
@end
@implementation MyTableViewCellSubclass
- (void)hideSeparator
{
_separatorIsHidden = YES;
}
- (void)layoutSubviews
{
[super layoutSubviews];
if (_separatorIsHidden) {
UIEdgeInsets inset = self.separatorInset;
inset.right = self.bounds.size.width - inset.left;
self.separatorInset = inset;
}
}
@end
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.