J'essaie de supprimer le séparateur pour une UITableViewCell
. J'ai fait ce qui suit:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
if (indexPath.row == 1)
cell.separatorInset = UIEdgeInsetsZero;
return cell;
}
(C'est static cells
.) Quand je lance l'application. La ligne de séparation est toujours là. Comment puis-je supprimer la ligne de séparation pour une cell
?
Sur iOS 8, vous devez utiliser:
cell.layoutMargins = UIEdgeInsetsZero
Si vous souhaitez également être compatible avec iOS 7, procédez comme suit:
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
AJOUTER: Si la précédente ne fonctionnait pas - utilisez ceci. (de réponse ci-dessous)
cell.separatorInset = UIEdgeInsetsMake(0, 1000, 0, 0);
Vous pouvez simplement masquer visuellement le séparateur via la propriété separatorInset
:
tableViewCell.separatorInset = UIEdgeInsets(top: 0, left: 10000, bottom: 0, right: 0)
Si vous souhaitez masquer la ligne de séparation pour un type de cellule spécifique uniquement, vous pouvez utiliser le code suivant:
override func layoutSubviews() {
super.layoutSubviews()
subviews.forEach { (view) in
if view.dynamicType.description() == "_UITableViewCellSeparatorView" {
view.hidden = true
}
}
}
Écrivez ce code dans la cellule (il doit s'agir d'une sous-classe de UITableViewCell
) pour lequel vous ne souhaitez pas qu'une ligne de séparation apparaisse.
Attribuez les valeurs suivantes pour la cellule spécifique dont vous avez besoin pour la personnalisation.
cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGFloat.greatestFiniteMagnitude)
cell.directionalLayoutMargins = .zero
Ajoutez simplement ce qui suit à la cellule que vous ne voulez pas séparateur (Swift 3):
override func awakeFromNib() {
super.awakeFromNib()
// remove separator
self.separatorInset = UIEdgeInsetsMake(0, 1000, 0, 0)
}
cell.separatorInset = UIEdgeInsetsMake(0.0 , cell.bounds.size.width , 0.0, -cell.bounds.size.width)
Pour les personnes aux prises avec ce problème pour iOS 9, la solution est un peu différente des réponses déjà données. Voici comment je l'ai résolu dans Swift:
override func viewWillAppear(animated: Bool) {
table.cellLayoutMarginsFollowReadableWidth = false
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if IS_THE_CELL_WITH_NO_SEPARATOR{
cell.separatorInset = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
cell.layoutMargins = UIEdgeInsetsZero
}
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if IS_THE_CELL_WITH_NO_SEPARATOR{
let size = self.view.bounds.size
let rightInset = size.width > size.height ? size.width : size.height
cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, rightInset)
}
}
Une autre façon un peu compliquée consiste à créer la cellule d'affichage du tableau personnalisé avec un uiView qui agit comme un séparateur. Puis, cachez-le et montrez-le quand vous le souhaitez.
J'ai créé SampleTableViewCell et un fichier nib avec label et separatorLineView
@interface SampleTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UIView *separatorLineView;
@end
Ensuite, dans ViewController Class
@interface ViewController ()
@property (nonatomic) NSArray *items;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.items = @[@"A", @"B", @"C"];
[self.tableView registerNib:[UINib nibWithNibName:@"SampleTableViewCell" bundle:nil] forCellReuseIdentifier:@"SampleCell"];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
SampleTableViewCell *cell = (SampleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"SampleCell" forIndexPath:indexPath];
cell.titleLabel.text = self.items[indexPath.row];
if (indexPath.row == 1) {
cell.separatorLineView.hidden = YES;
} else {
cell.separatorLineView.hidden = NO;
}
return cell;
}
@end