web-dev-qa-db-fra.com

Masquer la ligne de séparation si UITableViewCells est vide

J'ai une UITableView et je n'ai que 3 rangées, et je peux voir ces 3 rangées. Le problème, ce sont les cellules vides: je peux y voir des lignes. Je ne veux pas voir ces lignes.

Une idée de comment enlever ces lignes?

Vous trouverez ci-dessous une image de ce que je recherche.

Image Link

83
Fahim Parkar

Vous pouvez masquer la ligne de séparateur standard de UITableView en utilisant l’un des extraits de code ci-dessous . Le moyen le plus simple d’ajouter un séparateur personnalisé est d’ajouter une simple UIView de hauteur 1px:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want.
[cell.contentView addSubview:separatorLineView];

OU

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

OU

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

OU

Et aussi vérifier la réponse de nickfalk , elle est très courte et utile aussi . Et vous devriez aussi essayer cette seule ligne,

self.tableView.tableFooterView = [[UIView alloc] init];

Pas sûr, mais cela fonctionne dans toutes les versions d'iOS que j'ai vérifiées, avec iOS 5 et versions ultérieures, jusqu'à iOS 7.

88
iPatel

Encore plus simple que la réponse d'Andrey Z: Créez simplement un faux tableauFooterView dans votre classe UITableView:

self.tableFooterView = [UIView new]; // to hide empty cells

et rapide:

tableFooterView = UIView()

146
T. Benjamin Larsen

Transparent UIView comme un pied de page tableView avec une hauteur de 1 px fera l'affaire.

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
7
Andrey Zverev

Réponse mise à jour pour Swift et iOS 9. Ceci fonctionne pour les vues de table de la variété .Plain.

 tableView.tableFooterView = UIView()
7
seo
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
6
Robert Varga

Utilisez ce code pour supprimer la ligne de séparation des cellules vides.

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
     return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}   
3
Pradhyuman sinh

Renvoyer simplement une UIView() vide dans viewForFooterInSection a fonctionné pour moi:

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }
2
codelearner

S'il vous plaît essayez le code suivant:

self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)])
{
    [self.tblView setSeparatorInset:UIEdgeInsetsZero];
}
// write in view did load
2
Aatish Javiya

Vous pouvez utiliser

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

Cela a fonctionné pour moi ...

1
Mak083

Certaines des suggestions précédentes contiennent une grosse erreur conceptuelle:

si tu fais:

[cell addSubview: ....

même si une cellule est "réutilisée", vous ajouterez une nouvelle sous-vue pour le diviseur!

éviter de deux manières:

a) utiliser un TAG, et: 1) demander une sous-vue pour cette balise let divider = cell.viewWithTag (TAG) ... 2) le cas échéant, NE PAS ajouter une autre sous-vue 3) si NON présent, ajoutez AND et marquez-le.

b) créez une vue personnalisée et ajoutez votre séparateur personnalisé dans "init", "awakeFromNib" de la cellule personnalisée.

code pour a):

 if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{
            // nothing.. eventually change color bases in IndexPath...
        }else{
            let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1)
            divider.tag = DIVIDER_TAG
            divider.backgroundColor = UIColor.redColor()
            cell.addSubview(divider)
        }
0
ingconti

Si vous utilisez Storyboards, vous pouvez simplement faire glisser un UIView dans votre UITableView sous vos cellules et définir sa hauteur sur 0. (N'avoir testé que dans un projet iOS 8)

0
Matoz

À l'intérieur de cellForRowAtIndexPath

let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5))
separatorLineView.backgroundColor = tableView.separatorColor
cell!.contentView.addSubview(separatorLineView)
0

Aucune des réponses suggérées ne convenait à mon problème similaire. Implémenter cette méthode dans le délégué tableView a finalement fonctionné:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}
0
Rok Jarc

Vous pouvez définir la vue sous forme de groupe de manière à ce qu'elle soit groupée plutôt que tout en un. Cela change légèrement l'apparence, mais au moins supprime les lignes supplémentaires.

J'ai eu exactement ce problème et j'ai fini par adopter des vues groupées. Semble beaucoup mieux.

0
nickdnk

Solution rapide: TableView.tableFooterView = UIView (cadre: CGRectZero)

A travaillé sur Xcode 7.2

0
Vladimir Romanov

Je suppose que c'est ce que vous recherchez.

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 1.0f;
}
0
Deepak Badiger