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?

Stephen Fox
quelle

Antworten:

403

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

tableView.tableFooterView = UIView()
HorseT
quelle
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

Bakalolo
quelle
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
Toast
quelle
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)
        }
    }
Giang
quelle
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.)

Quickthyme
quelle
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()
}
Elarcoiris
quelle
2

Basierend auf den obigen Antworten in Kürze .

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

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

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

Mannopson
quelle
1

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

tblOutletName.tableFooterView = UIView ()

Dhaval Gevariya
quelle
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.

Tejas
quelle
-2

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

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

Cory Billeaud
quelle
Dadurch wird das letzte Element im Array nicht angezeigt.
Elarcoiris