web-dev-qa-db-fra.com

Supprimer la ligne de séparation pour une seule cellule

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?

27
Jessica

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);
22
Grzegorz Krukowski

Vous pouvez simplement masquer visuellement le séparateur via la propriété separatorInset:

tableViewCell.separatorInset = UIEdgeInsets(top: 0, left: 10000, bottom: 0, right: 0)
15
Valentin Shergin

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.

6
Kostas Tsoleridis

Swift 4

iOS 11

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
3
dimpiax

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)
}
2
COzkurt
cell.separatorInset = UIEdgeInsetsMake(0.0 , cell.bounds.size.width , 0.0, -cell.bounds.size.width)
1
katwal-Dipak

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)
    }
}
1
boidkan

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
0
thanyaj