So entfernen Sie zusätzliche leere Zellen in TableViewController, iOS - Swift


118

Hallo, ich habe eine TableViewControllermit zwei statischen Zellen, aber wenn angezeigt, zeigt es die zwei statischen Zellen und dann alle anderen leeren Zellen für die Tabellenansicht. Ich möchte diese Zellen jedoch nicht anzeigen, da sie unbrauchbar sind. Wie verstecke ich den Rest der Zellen außer den beiden statischen Zellen?

Antworten:


403

Fügen Sie in Ihrer viewDidLoad()Funktion diese Codezeile hinzu:

tableView.tableFooterView = UIView()

4
Kurz und effektiv! Arbeitete wie Charme!
Yogipriyo

6
Was bedeutet das? Könnten Sie näher darauf eingehen?
Jayprakash Dubey

Diese Antwort ist in Swift 3 weiterhin gültig. Wenn Sie die Hintergrundfarbe für die Tabellenansicht auf die Hintergrundfarbe für die Hauptansichten einstellen, sieht es so aus, als wäre die Fußzeile verschwunden.
Micah Montoya

Gibt es eine ähnliche Lösung für NSTableView? Es hat keine tableFooterView.
Ixany

SWIFT 3.0 funktioniert hervorragend mittableView.tableFooterView = UIView()
Marcelo Gracietti

19

Wählen Sie Ihre UITableView aus, rufen Sie den Attributinspektor auf und ändern Sie den Stil in Gruppiert.

Geben Sie hier die Bildbeschreibung ein


7

Der Grund für die Einstellung tableFooterViewzum UIView()Entfernen der Zeilen liegt darin, dass Sie ein leeres UIView()Objekt für die Eigenschaft festlegen. Gemäß der Apple-Dokumentation:

var tableFooterView: UIView?

Wenn Sie daher ein leeres UIView () festlegen, wird für diese Eigenschaft nichts unter Ihren Daten angezeigt.

Sie können die leeren Zeilen zurücksetzen tableFooterView, indem Sie den Standardwert wie folgt zurücksetzen :

tableView.tableFooterView = nil

2
Entschuldigung, aber sieht es nicht nach einem Hack aus?
AOY

2
Nein, das ist eine völlig gültige Methode. Wenn Sie eine benutzerdefinierte tableFooterView festlegen möchten, erstellen Sie eine benutzerdefinierte UIView, bevor Sie sie auf tableFooterView festlegen. Wenn Sie es dann auf Null zurücksetzen, wird es nur auf den Standardwert zurückgesetzt.
Toast

Aha. Danke) Es sieht nur ein bisschen komisch für mich aus, da ich neu bei Swift bin
AOY

6

Durch Einstellen von tableFooterViewsollten zusätzliche zellenähnliche Ansichten entfernt werden.

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

3

Sie können dies auch im Storyboard erreichen, indem Sie einfach eine Ansicht in den Fußbereich der Tabellenansicht ziehen und dann die Höhe und Hintergrundfarbe auf 1 setzen bzw. mit dem Eigenschafteninspektor löschen.

(Dies setzt voraus, dass Sie die Gruppenstileinstellung aus irgendeinem Grund nicht verwenden können oder möchten. Andernfalls tun Sie dies einfach.)


3

Swift 4 Wenn Sie auf die Antwort von HorseT eingehen, steuern Sie zunächst das Ziehen aus Ihrer Tabellenansicht in Ihrem Storyboard in Ihre View Controller-Klasse und erstellen Sie eine Steckdose mit dem Namen tableView.

@IBOutlet weak var tableView: UITableView!

Dann sollte Ihr viewDidLoad in Ihrem View Controller ungefähr so ​​aussehen:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}

2

Basierend auf den obigen Antworten in Kürze .

tableView.tableFooterView = UIView(frame: .zero)

2

Wenn Sie Zeilen für alle UITableViewsin Ihrer App entfernen möchten , fügen Sie einfach eine Erweiterung wie die folgende hinzu:

Swift 5.0

extension UITableView {

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

}

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

Rufen Sie diesen Code innerhalb der viewWillAppearMethode auf. Und wird funktionieren


1

Fügen Sie den folgenden Code in Ihre Funktionen " func viewDidLoad () überschreiben " oder "func viewWillAppear (_ animiert: Bool) überschreiben" "ein .

tblOutletName.tableFooterView = UIView ()


0

Einfach hinzufügen:

tableView.tableFooterView = UIView()

Erläuterung:

Dies ist absolut gültig und funktioniert in kurzer Zeit einwandfrei. 3.By Da Sie ein leeres UIView () -Objekt für die Eigenschaft festlegen, werden die Zeilen durch Festlegen von tableFooterView auf UIView () entfernt.


-2

Abobe anwer ist richtig. Wir können dies erreichen, indem wir hinzufügen

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

-3

Ich habe die tableview.tableFooterView = UIView () ausprobiert und es hat bei mir nicht funktioniert. Ich verwende eine benutzerdefinierte TableViewViewCell, vielleicht deshalb.

Ich habe einen Hack gefunden. In meiner func numberOfRowsInSection

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

Dadurch wird meine extra leere benutzerdefinierte UITableViewCell nicht mehr angezeigt. Natürlich ist es das extra leere. Ich werde es noch mehr testen, indem ich weitere Zellen hinzufüge. Als Referenz verwende ich Swift 3, Firebase, eine benutzerdefinierte Zellenklasse, innerhalb der cellForRowAt-Funktion.


Dadurch wird das letzte Element im Array nicht angezeigt.
Elarcoiris
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.