iphone - Comment supprimer la dernière bordure de la dernière cellule dans UITableView?




objective-c ios xcode (13)

Dans mon application, j'utilise un UITableView Mon problème est que je veux supprimer la dernière bordure de la dernière cellule dans UITableView .

Veuillez vérifier l'image suivante:


Answers

Le code ci-dessous m'aide à supprimer le séparateur de la dernière ligne dans un 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 } }


La meilleure solution est d'ajouter une vue de pied de page. Le code suivant masque parfaitement la ligne de la dernière cellule:

Objectif c

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)];

Swift 4.0

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1))

_tableView.tableFooterView = [[UIView alloc] initWithFrame: CGRectZero];


Ajoutez cette ligne de code dans viewDidLoad() .

tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0.001))

Ceci s'assure que le dernier séparateur sera remplacé et remplacé (invisible) la vue de pied n'occupera aucune taille supplémentaire. Étant donné que la largeur de la vue de pied de page sera gérée par UITableView , vous pouvez la définir sur 0.


Dans iOS 7, il existe une solution plus simple. Supposons que la cellule est votre dernière cellule:

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);

Non, vous ne pouvez pas faire ça. Ces séparateurs sont très bien coupés et secs, style et couleur c'est tout. Cependant, une solution alternative pourrait être de désactiver tous les séparateurs et de définir une image de fond avec une ligne horizontale en bas pour toutes les cellules sauf la dernière.

EX:

    [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    if (indexPath.row == [myArray count] - 1) {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]];
        [cell setBackgroundView:imageView];
    }

Ma version plus courte:

self.tblView.tableFooterView = [UIView new];

Cela fonctionne pour moi dans iOS 7 et 8:

cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(tableView.bounds));

Remarque: tableView.bounds attention à l'utilisation de tableView.bounds car il signale parfois la valeur incorrecte en fonction du moment où vous l'appelez. Voir Signaler les limites incorrectes en mode paysage


Voici le remède que j'utilise actuellement. ce n'est peut-être pas la meilleure approche, mais cela fonctionne.

Supprimer SeparatorColor et setSeparatorStyle pour créer un séparateur personnalisé

- (void)viewDidLoad
{
    [super viewDidLoad];

    ...

    [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [self.tableView setSeparatorColor:[UIColor clearColor]];
}

Ajouter un séparateur personnalisé à chaque cellule avec le fond de tableview

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    ...

    UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.size.height-1, 320, 1)];
    separatorLineView.backgroundColor = self.tableView.backgroundColor;
    [cell.contentView addSubview:separatorLineView];

    return cell;
}

Recherchez le dernier index de cellule dans le délégué cellForRow et placez la ligne de code ci-dessous:

cell.separatorInset = UIEdgeInsetsMake(
    0.f,
    40.0f,
    0.f,
    self.view.frame.size.width-40.0f
);

Mis à jour le 14/09/15. Ma réponse originale est devenue obsolète, mais c'est toujours une solution universelle pour toutes les versions d'iOS:

Vous pouvez masquer la ligne de séparateur standard de tableView et ajouter votre ligne personnalisée en haut de chaque cellule. Le moyen le plus simple d'ajouter un séparateur personnalisé est d'ajouter un simple UIView de 1px height:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.bounds.size.width, 1)];
separatorLineView.backgroundColor = [UIColor grayColor];
[cell.contentView addSubview:separatorLineView];

À ce jour, je m'abonne à un autre moyen de cacher des séparateurs supplémentaires sous les cellules (fonctionne pour iOS 6.1+):

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Expansion de la réponse de Tonny Xu, j'ai plusieurs sections et cela semble fonctionner pour enlever le dernier séparateur de cellules

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 la source de données cellForRowAtIndexPath


Mon problème était avec Xcode 7 et Xcode 6.4 beta et iOS 8.4 - appareil non compatible.

Dans le cas du même problème pour mieux comprendre comment résoudre, faire ensuite:

  1. Allez dans /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
  2. Aller à
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSup port /
  3. Copier le dossier iOS 8.4 dans un autre dossier

  1. Redémarrer Xcode






iphone objective-c ios xcode uitableview