Comment supprimer des cellules vides supplémentaires dans TableViewController, iOS - Swift


118

Salut, j'ai un TableViewControlleravec deux cellules statiques, mais lorsqu'il est affiché, il montre les deux cellules statiques, puis toutes les autres cellules vides pour le tableau. Cependant, je ne veux pas afficher ces cellules car elles sont inutiles. Comment masquer le reste des cellules en dehors des deux cellules statiques?

Réponses:


405

dans votre viewDidLoad()fonction ajoutez cette ligne de code:

tableView.tableFooterView = UIView()

4
Court et efficace! A travaillé comme du charme!
yogipriyo

6
Qu'est-ce que ça veut dire? Pourriez-vous élaborer?
Jayprakash Dubey

Cette réponse est toujours valable dans Swift 3. De plus, si vous définissez la couleur d'arrière-plan de la vue du tableau de la même manière que la couleur d'arrière-plan des vues principales, cela donnera l'impression que le pied de page a disparu.
Micah Montoya

Existe-t-il une solution similaire pour NSTableView? Il n'a pas de fichier tableFooterView.
ixany

SWIFT 3.0 fonctionne très bien avectableView.tableFooterView = UIView()
Marcelo Gracietti

19

Sélectionnez votre UITableView, accédez à l'inspecteur d'attributs et changez le style en Groupé.

entrez la description de l'image ici


7

Pour ajouter à cela, la raison pour laquelle la mise tableFooterViewà UIView()Retire les lignes parce que vous définissez un vide UIView()objet à la propriété. Selon la documentation Apple:

var tableFooterView: UIView?

Par conséquent, la définition d'un UIView () vide n'affichera rien sous vos données pour cette propriété.

Vous pouvez ramener les lignes vides en réinitialisant tableFooterViewla valeur par défaut, comme ceci:

tableView.tableFooterView = nil

2
Désolé mais ça ne ressemble pas à un hack?
AOY

2
Non, c'est une façon tout à fait valable de le faire. Si vous souhaitez définir un tableFooterView personnalisé, vous créez un UIView personnalisé avant de le définir sur tableFooterView. Ensuite, le réinitialiser à nil revient simplement à le remettre à sa valeur par défaut.
toast

Je vois. Merci) Cela me semble juste un peu étrange car je suis nouveau pour Swift
AOY

6

La définition de tableFooterViewdevrait supprimer les cellules supplémentaires telles que les vues.

   @IBOutlet weak var tableView: UITableView! {
        didSet {
            tableView.tableFooterView = UIView(frame: .zero)
        }
    }

3

Vous pouvez également y parvenir dans Storyboard en faisant simplement glisser une vue dans la zone de pied de page de la vue tableau, puis en définissant sa hauteur et sa couleur d'arrière-plan sur 1 et effacer respectivement à l'aide de l'inspecteur de propriétés.

(Cela suppose que vous ne pouvez pas ou ne voulez pas simplement utiliser le paramètre de style de groupe pour une raison quelconque. Sinon, faites-le.)


3

Swift 4 En élaborant sur la réponse de HorseT, commencez par faire glisser le contrôle depuis votre vue de table dans votre storyboard, vers votre classe de contrôleur de vue et créez une prise appelée tableView.

@IBOutlet weak var tableView: UITableView!

Ensuite, votre viewDidLoad dans votre View Controller devrait ressembler à ceci:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}

3

Basé sur les réponses ci-dessus en rapide .

tableView.tableFooterView = UIView(frame: .zero)

2

si vous souhaitez supprimer des lignes pour tous UITableViewsdans votre application, ajoutez simplement une extension comme celle-ci:

Swift 5.0

extension UITableView {

override open func didMoveToSuperview() {
    super.didMoveToSuperview()
    self.tableFooterView = UIView()

}

2
tableView.tableFooterView = UIView.init(frame: CGRect.zero)

Appelez ce code dans viewDidLoadmethod.


1

Ajoutez le code ci-dessous dans vos fonctions " override func viewDidLoad () " ou "override func viewWillAppear (_ animated: Bool)" .

tblOutletName.tableFooterView = UIView ()


0

Ajoutez simplement:

tableView.tableFooterView = UIView()

Explication:

Ceci est totalement valide et fonctionne parfaitement dans swift 3.By Puisque vous définissez un objet UIView () vide sur la propriété, la définition de tableFooterView sur UIView () supprime les lignes.


-2

Abobe anwer a raison. Nous pouvons y parvenir en ajoutant

tableView.tableFooterView = UIView() // to remove extra cells in tableView

-3

J'ai essayé le tableview.tableFooterView = UIView () et cela n'a pas fonctionné pour moi. J'utilise un TableViewViewCell personnalisé, c'est peut-être pourquoi.

J'ai trouvé un hack tho. Dans ma fonction numberOfRowsInSection

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return yourArrayClass.count - 1
}

Et cela fait que mon UITableViewCell personnalisé extra vierge ne s'affiche plus. Bien sûr, c'est le plus vierge. Je vais le tester un peu plus en ajoutant plus de Cellules. Pour référence, j'utilise Swift 3, Firebase, une classe de cellule personnalisée, à l'intérieur de la fonction cellForRowAt.


Cela n'affichera pas le dernier élément du tableau.
elarcoiris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.