Come rimuovere celle vuote in più in TableViewController, iOS - Swift


118

Ciao, ho un TableViewControllercon due celle statiche, tuttavia quando viene visualizzato, mostra le due celle statiche, e poi tutte le altre celle vuote per la tableview. Tuttavia non voglio visualizzare quelle celle in quanto sono inutili. Come nascondo il resto delle celle a parte le due celle statiche?

Risposte:


403

nella tua viewDidLoad()funzione aggiungi questa riga di codice:

tableView.tableFooterView = UIView()

4
Breve ed efficace! Ha funzionato come un fascino!
yogipriyo

6
Cosa significa questo? Potresti elaborare?
Jayprakash Dubey

Questa risposta è ancora valida in Swift 3. Inoltre, se imposti il ​​colore di sfondo della vista tabella come il colore di sfondo della vista principale, sembrerà che il piè di pagina sia sparito.
Micah Montoya

Esiste una soluzione simile per NSTableView? Non ha un file tableFooterView.
ixany

SWIFT 3.0 funziona alla grande contableView.tableFooterView = UIView()
Marcelo Gracietti

19

Seleziona il tuo UITableView, vai all'ispettore degli attributi e cambia lo stile in Raggruppato.

inserisci qui la descrizione dell'immagine


7

Per aggiungere a ciò, il motivo per cui l'impostazione tableFooterViewsu UIView()rimuove le righe è perché stai impostando un UIView()oggetto vuoto nella proprietà. Come da documentazione Apple:

var tableFooterView: UIView?

Pertanto l'impostazione di un UIView () vuoto non visualizzerà nulla sotto i dati per questa proprietà.

Puoi riportare le righe vuote ripristinando tableFooterViewil valore predefinito, in questo modo:

tableView.tableFooterView = nil

2
Scusa ma non sembra un hack?
AOY

2
No, questo è un modo completamente valido per farlo. Se si desidera impostare un tableFooterView personalizzato, è necessario creare un UIView personalizzato, prima di impostarlo su tableFooterView. Quindi resettarlo a zero lo sta semplicemente riportando al suo valore predefinito.
brindisi

Vedo. Grazie) Sembra solo un po 'strano per me dato che sono nuovo in
Swift

6

L'impostazione tableFooterViewdovrebbe rimuovere le visualizzazioni simili alle celle.

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

3

Puoi ottenere ciò anche in Storyboard semplicemente trascinando una vista nell'area del piè di pagina della vista tabella, quindi impostarne l'altezza e il colore di sfondo su 1 e deselezionarla rispettivamente utilizzando la finestra di ispezione delle proprietà.

(Questo presume che tu non possa o non voglia semplicemente usare l'impostazione Stile gruppo per qualche motivo. Altrimenti, fallo e basta.)


3

Swift 4 Elaborando la risposta di HorseT, per prima cosa trascina il controllo dalla visualizzazione tabella nello storyboard, alla classe Controller visualizzazione e crea una presa chiamata tableView.

@IBOutlet weak var tableView: UITableView!

Quindi, il tuo viewDidLoad nel tuo controller di visualizzazione dovrebbe essere simile a questo:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}

3

Sulla base delle risposte di cui sopra in rapida .

tableView.tableFooterView = UIView(frame: .zero)

2

se vuoi rimuovere tutte le righe UITableViewsdalla tua app, aggiungi un'estensione come questa:

Swift 5.0

extension UITableView {

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

}

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

Chiama questo codice all'interno del viewWillAppearmetodo. E funzionerà


1

Aggiungi sotto il codice nelle funzioni " override func viewDidLoad () " o "override func viewWillAppear (_ animated: Bool)" .

tblOutletName.tableFooterView = UIView ()


0

Aggiungi semplicemente:

tableView.tableFooterView = UIView()

Spiegazione:

Questo è totalmente valido e funziona perfettamente in swift 3.By Poiché stai impostando un oggetto UIView () vuoto nella proprietà, l'impostazione di tableFooterView su UIView () rimuove le righe.


-2

Abobe anwer ha ragione. Possiamo ottenere ciò aggiungendo

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

-3

Ho provato tableview.tableFooterView = UIView () e non ha funzionato per me. Sto usando un TableViewViewCell personalizzato, forse è per questo.

Ho trovato un hack tho. Nella mia funzione numberOfRowsInSection

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

E questo fa sì che il mio UITableViewCell personalizzato extra vuoto non venga più visualizzato. Ovviamente è quello vuoto in più. Lo testerò ancora aggiungendo più celle. Per riferimento, sto usando Swift 3, Firebase, una classe di celle personalizzata, all'interno della funzione cellForRowAt.


Questo non visualizzerà l'ultimo elemento dell'array.
elarcoiris
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.