web-dev-qa-db-fra.com

comment masquer les lignes vides dans un UITableView et modifier la hauteur de la vue Uitableview en fonction des lignes non vides

J'ai quelques problèmes avec ma UITableView.

  1. Lorsque j'ajoute un UITableview sur ma page, il génère par défaut un nombre fixe de lignes, Même si j'ai défini le nombre de lignes de la section dans 1. Toutes les lignes apparaissent sauf la première ligne, et sont des lignes vides. Je souhaite donc masquer toutes les lignes vides de la variable UItableview

  2. En fonction des lignes non vides, je souhaite modifier la hauteur de ma UItableView.

60
sbmandav

Vous êtes sûr que vous utilisez le style UITableViewStyleGrouped?

Parce que par défaut, il est défini sur UITableViewStylePlain qui affiche également les cellules vides après l'affichage des cellules remplies.

53
Sanniv

NOUVELLE REPONSE

Dans Swift 2.2, 3.0 et versions ultérieures, procédez comme suit:

tableView.tableFooterView = UIView()

VIEILLE RÉPONSE CI-DESSOUS. Gardé pour la postérité.

Si vous devez utiliser UITableViewStylePlain et que vous n'utilisez pas footerView pour autre chose, vous pouvez utiliser la solution semi-sale suivante si vous avez activé ARC enabled .:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = [[UIView alloc] init];

    return view;
}

Si vous avez ARC disabled , utilisez les éléments suivants:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *view = [[[UIView alloc] init] autorelease];

    return view;
}

Cela crée un footerView invisible, qui apparaît immédiatement après la dernière cellule remplie de données.

79
ArtSabintsev
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
 { 
     return 0.01f;
 }

et pour iOS 7

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

J'ai résolu le problème en créant une simple UIView en tant que vue de pied de page avec la même couleur d'arrière-plan que celle de la table:

(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
    view.backgroundColor = [UIColor whiteColor];
    return view;
}

Peut-être devez-vous également désactiver le défilement dans votre vue tableau.

18
Katlu
- (void) viewDidLoad
{
  [super viewDidLoad];
  self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
}
11
yunas

Si votre tableview a plusieurs sections, vous pouvez essayer ceci:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return [UIView new];
    }
    return nil;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return 1;
    }
    return 0;
}
11
codyko

Cela peut également être fait via Interface Builder. Ajoutez simplement UIView de 1 pixel en tant que pied de page à UITableView. C'est en gros la même chose que la plupart des réponses ici, mais cela conserve certaines spécificités de l'interface utilisateur dans la vue plutôt que dans le contrôleur de vue.

enter image description here

6
Matt Becker
[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

Utilisez cette option pour supprimer les lignes si la variable UITableView est vide.

6
Code Guru

dans la méthode qui renvoie le nombre de lignes, spécifiez le count vous-même de manière dynamique. Par exemple, si vous allez remplir la table avec, par exemple, un NSArray nommé arrayForRows:

return [arrayForRows count]; // inside the method which returns the number of rows.

L'exemple ci-dessus est un exemple simple de remplissage d'une table avec un tableau en tant que source de données. Il n'y a pas de lignes vides. Seules autant de lignes apparaissent dans la table en fonction de la count des éléments du tableau remplissant la table.

Je pense que vous voulez dire la hauteur de la ligne dans la table. Vous pouvez jouer avec la hauteur des lignes en utilisant la méthode suivante:

(CGFloat)tableView:(UITableView  *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath

read http://developer.Apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//Apple_ref/occ/intfm/UITableViewDelegate/tableView : heightForRowAtIndexPath :

EDIT: ah maintenant je comprends ce que vous essayez de réaliser. Vous essayez d'éviter d'afficher les lignes vides séparées avec ces lignes de séparation, n'est-ce pas? Voir ce post:

comment afficher une table avec zéro ligne dans UITableView

0
Bourne

Un peu caché dans la réponse de Bourne; si vous souhaitez masquer les lignes vides en bas d'une tableview simple avec plusieurs sections, utilisez la réponse suivante:

https://stackoverflow.com/a/5658100/580173

0
ejazz

Pour Swift:

override func viewWillAppear(animated: Bool) {
    self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

// OR 

    self.tableView.tableFooterView = UIView()
}

Pour C #: (n'oubliez pas d'ajouter using CoreGraphics;)

public override void ViewWillAppear(bool animated)
{
    base.ViewWillAppear(animated);
    this.sampleTableview.TableFooterView = new UIView(frame: CGRect.Empty);
}
0
A.G