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.
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.
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()
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];
Réponse mise à jour pour Swift et iOS 9. Ceci fonctionne pour les vues de table de la variété .Plain
.
tableView.tableFooterView = UIView()
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
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];
}
Renvoyer simplement une UIView()
vide dans viewForFooterInSection
a fonctionné pour moi:
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
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
Vous pouvez utiliser
tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Cela a fonctionné pour moi ...
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)
}
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)
À 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)
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;
}
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.
Solution rapide: TableView.tableFooterView = UIView (cadre: CGRectZero)
A travaillé sur Xcode 7.2
Je suppose que c'est ce que vous recherchez.
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 1.0f;
}