Lorsque je configure une vue sous forme de tableau avec 4 lignes, il reste des lignes de séparateur supplémentaires (ou des cellules vides supplémentaires) sous les lignes remplies.
Comment pourrais-je enlever ces cellules?
Il suffit de faire glisser UIView vers la table. Dans le storyboard, il sera placé en haut, sous vos cellules personnalisées. Vous préférerez peut-être l'appeler "pied de page".
Ici, il est affiché en vert pour plus de clarté, vous voudrez probablement une couleur claire.
Notez qu'en ajustant la hauteur, vous pouvez affecter le traitement du "rebond du bas" de la table, selon vos préférences. (La hauteur zéro est généralement bonne).
Pour le faire par programme:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
ou si vous préférez,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Ajouter au contrôleur de vue de table ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
et si nécessaire ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
Voici une autre façon de faire cela avec le style de table groupée, et une autre que vous ne devineriez probablement pas. Ajouter un en-tête et pied de page à la table (peut-être que l'un ou l'autre suffit, n'ont pas vérifié) les séparateurs disparaissent des lignes de remplissage/vides.
Je suis tombé dessus parce que je voulais un peu d’espace en haut et en bas des tables pour réduire le risque de toucher des boutons au lieu d’une cellule de table avec des doigts charnus. Voici une méthode pour coller une vue vierge comme en-tête et pied de page. Utilisez la hauteur que vous souhaitez, vous éliminez toujours les lignes de séparation supplémentaires.
- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}
En réponse à @Casebash, je suis retourné au code de mon application ("AcmeLists" List Manager dans iTunes Store ...) et j'ai court-circuité la méthode addHeaderAndFooter pour la vérifier. Sans lui, j'ai les séparateurs de lignes supplémentaires; avec le code, j'ai ce que vous voyez dans cette fenêtre snap: pas de séparateurs de lignes de tableau image . Donc, je ne suis pas sûr de savoir pourquoi cela n’aurait pas fonctionné pour vous. De plus, il est logique pour moi d’avoir un pied de page personnalisé dans une vue tableau qui doit nécessairement cesser de dessiner des séparateurs de lignes pour les lignes vides situées en dessous. Ce serait hideux. Pour référence, j'ai regardé les tables où il y avait plus de lignes que ce qui pouvait être visualisé à l'écran, puis une table avec deux lignes. Dans les deux cas, pas de séparateurs étrangers.
Peut-être que vos vues personnalisées n'ont pas été réellement ajoutées. Pour vérifier cela, définissez la couleur d'arrière-plan sur une valeur autre que clearColor
, par exemple [UIColor redColor]
. Si vous ne voyez pas de barres rouges au bas de la table, votre pied de page n'était pas défini.
Suppression de lignes de séparation supplémentaires pour les lignes vides dans UITableView dans Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Je voudrais prolonger wkw answer:
Le simple fait d'ajouter que le pied de page de hauteur 0 fera l'affaire. (testé sur sdk 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
ou encore plus simple - lorsque vous configurez votre tableview, ajoutez cette ligne:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
ou encore plus simple - pour supprimer simplement les séparateurs:
[_tableView setTableFooterView:[UIView new]];
Merci à wkw again :)
Faites simplement glisser une UIView
dans votre UITableView
en tant que pied de page. Définissez la hauteur de la vue de pied de page sur 0.
Essaye ça. Cela a fonctionné pour moi:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}
Vous pouvez simplement ajouter un pied de page vide à la fin, ce qui masquera les cellules vides, mais il aura également un aspect assez moche:
tableView.tableFooterView = UIView()
Il existe une meilleure approche: ajoutez une ligne de 1 point à la fin de la vue du tableau car le pied de page et les cellules vides ne seront plus affichés.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
Si vous utilisez Swift, ajoutez le code suivant à viewDidLoad du contrôleur qui gère la vue de table:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView(frame: CGRectZero)
}
Pour Swift 4.0, CGRectZero est obsolète, vous devez donc utiliser CGRect.zero
Faire avancer la solution de J. Costa: Vous pouvez apporter un changement global à la table en mettant cette ligne de code:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
dans la première méthode possible (généralement dans AppDelegate
, dans: méthode application:didFinishLaunchingWithOptions:
).
Je sais que cette question doit être acceptée, mais je mets ici différentes façons de masquer la ligne de séparation supplémentaire de UITableView
.
Vous pouvez masquer la ligne de séparateur standard de tableView
et ajouter votre ligne personnalisée en haut de chaque cellule.
Mettre à jour:
Le moyen le plus simple d’ajouter un séparateur personnalisé est d’ajouter une simple variable UIView
de hauteur 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[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 La meilleure et simple façon que j'aime est
self.tableView.tableFooterView = [[UIView alloc] init];
Essayez n'importe lequel.
il suffit d’ajouter ce code ( Swift ). .
tableView.tableFooterView = UIView()
ligne de séparateur supplémentaire uitableview masquer lignes de séparateur supplémentaire
self.tbltableView.tableFooterView = UIView(frame: .zero)
J'utilisais une vue sous forme de tableau pour afficher un nombre fixe de lignes de hauteur fixe. Je l'ai donc simplement redimensionnée et rendue non-défilable.
Swift fonctionne très bien avec:
tableView.tableFooterView = UIView()
Si vous ne souhaitez pas de séparateur après la dernière cellule, vous avez besoin d'une hauteur proche de zéro mais non nulle pour votre pied de page.
Dans votre UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Ajoutez simplement une vue avec la couleur de séparation souhaitée comme couleur d’arrière-plan, 100% largeur, hauteur 1px à la position x0 y-1 de votre tableViewCell. Assurez-vous que la tableViewCell ne coupe pas les sous-vues, mais la table devrait.
Ainsi, vous obtenez un séparateur absolut simple et fonctionnel uniquement entre les cellules existantes sans aucun hack par code ou par IB.
Remarque: sur le premier saut vertical, le 1er séparateur apparaît, mais cela ne devrait pas poser de problème, car il s'agit du comportement iOS par défaut.
Vous pouvez trouver beaucoup de réponses à cette question. La plupart d’entre eux sont manipulés avec l’attribut UITableView
de tableFooterView
et c’est le moyen approprié de masquer les lignes vides. Pour plus de commodité, j'ai créé une extension simple qui permet d'activer/désactiver les lignes vides à partir d'Interface Builder. Vous pouvez le vérifier à partir de ce fichier Gist . J'espère que cela vous fera économiser un peu de temps.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Usage:
tableView.isEmptyRowsHidden = true
Pour éliminer par programme des lignes de séparateur supplémentaires du bas de UItableview, il suffit de noter les deux lignes de code suivantes pour en supprimer le séparateur supplémentaire.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Cette astuce fonctionne pour moi tout le temps, essayez-vous.
Si vous n'avez qu'une seule section, le moyen le plus rapide et le plus simple consiste simplement à définir le style d'affichage de la table de «Ordinaire» à «Groupé». (voir image)
Si vous avez plusieurs sections, vous devrez peut-être définir la hauteur de l'en-tête sur zéro (selon les goûts de votre/votre client/votre chef de projet).
Si vous avez plusieurs sections et que vous ne voulez pas déranger les en-têtes (même s'il ne s'agit que d'une ligne dans le cas le plus simple), vous devez définir un UIView comme pied de page, comme expliqué dans les réponses précédentes.
Si vous souhaitez supprimer de l’espace non désiré dans UITableview, vous pouvez utiliser ci-dessous deux méthodes.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Rapide et facile Swift 4 way.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Si vous rencontrez des cellules statiques. Vous pouvez également désactiver le séparateur à partir de la fenêtre Inspecteur. (ce ne sera pas souhaitable si vous avez besoin du séparateur. Dans ce cas, utilisez la méthode ci-dessus)
Essayez avec ça
pour Objectif C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
pour Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
J'ai eu un peu de chance en implémentant un seul morceau de la réponse acceptée (iOS 9+, Swift 2.2). J'avais essayé d'implémenter:
self.tableView.tableFooterView = UIView(frame: .zero)
Cependant, cela n’a eu aucun effet sur ma tableView
- Je pense que cela peut avoir un lien avec le fait que j’utilisais UITableViewController
.
Au lieu de cela, je n’ai eu qu’à redéfinir la méthode viewForFooterInSection
(je n’ai pas défini la tableFooterView
ailleurs):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Cela a bien fonctionné pour une tableView
avec une seule section (si vous avez plusieurs sections, vous devez spécifier la dernière).
J'ai ajouté cette petite extension tableview qui aide tout au long
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Si vous avez une searchbar
dans votre view
(pour limiter le nombre de résultats par exemple), vous devez également ajouter les éléments suivants dans shouldReloadTableForSearchString
et shouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
UIKit
ne crée pas de cellule vide lorsque tableView
a une tableFooterView
. Nous pouvons donc créer une astuce et attribuer un objet UIView
de hauteur nulle au pied de la variable tableView
.
tableView.tableFooterView = UIView()
Essaye ça
self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
Dans Swift (j'utilise la version 4.0), vous pouvez y parvenir en créant une classe UITableViewCell
personnalisée et overriding
la méthode setSelected
. Puis le separator insets
all to 0 . (ma classe principale avec la vue de table a un fond clair) couleur.
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}