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?

Stephen Fox
la source

Réponses:

405

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

tableView.tableFooterView = UIView()
ChevalT
la source
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

Bakalolo
la source
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
pain grillé
la source
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)
        }
    }
Giang
la source
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.)

thym vif
la source
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()
}
elarcoiris
la source
3

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

tableView.tableFooterView = UIView(frame: .zero)
Rizwan Mehboob
la source
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()

}
mkhoshpour
la source
2
tableView.tableFooterView = UIView.init(frame: CGRect.zero)

Appelez ce code dans viewDidLoadmethod.

Mannopson
la source
1

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

tblOutletName.tableFooterView = UIView ()

Dhaval Gevariya
la source
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.

Tejas
la source
-2

Abobe anwer a raison. Nous pouvons y parvenir en ajoutant

tableView.tableFooterView = UIView() // to remove extra cells in tableView
Ummar Ahmed
la source
-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.

Cory Billeaud
la source
Cela n'affichera pas le dernier élément du tableau.
elarcoiris