[SWIFT] Ich möchte den oberen Rand in der UITableView von Grouped entfernen (schnell)

Xcode-12.0iOS-14.0Swift-5.3

Einführung

Wie in der Abbildung unten gezeigt, notieren Sie sich die Methode, wenn Sie die Anzeige / Nichtanzeige des oberen Randes abhängig von der Bedingung in "UITableView", in der "Stil" gruppiert ist, umschalten möchten.

Randanzeige Ränder ausblenden
success_1 success_2

Dieses Mal wollte ich den Rand entfernen, wenn der Header wie das Bild angezeigt wird, und den Rand haben, wenn der Header nicht angezeigt wird. .. ..

Schlechtes Muster

Das Muster, das vorerst nutzlos war. .. .. Wie unten gezeigt, setze ich den Header in Abschnitt 0 und die Höhe, wenn "isHeaderShown" "true" ist.

extension TableViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        guard section == 0 else {
            return UITableView.automaticDimension
        }
        return isHeaderShown ? 50 : UITableView.automaticDimension
    }

    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        guard section == 0 else {
            return nil
        }
        return isHeaderShown ? HeaderView() : nil
    }
}

Ergebnis

failure

Nur die erste Anzeige ist gut, aber die zweite und die folgenden Zeiten sind seltsam. .. .. : Stirnrunzeln2:

Muster 1, das gut zu sein scheint

Oben Methode + Ich habe versucht, mit tableHeaderView zu spielen, als ich die Tabelle wie unten gezeigt aktualisiert habe.

tableView.tableHeaderView = isHeaderShown ? UIView() : nil
tableView.reloadData()

Ergebnis

success

Verstanden: tada:

Muster 2, das gut zu sein scheint

Es scheint, dass die obige Methode verwendet werden kann, aber wenn Sie den Header zuerst nur oben setzen, dachte ich, dass es nicht notwendig ist, View in sectionHeader zu setzen, und schließlich tat ich Folgendes.

extension TableViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        guard section == 0 else {
            return UITableView.automaticDimension
        }
        return isHeaderShown ? CGFloat.leastNormalMagnitude : UITableView.automaticDimension
    }
}

//Verarbeitung zum Zeitpunkt der Aktualisierung
tableView.tableHeaderView = isHeaderShown ? HeaderView(frame: .init(origin: .zero, size: .init(width: 0, height: 50))) : nil
tableView.reloadData()

Das Ergebnis war das gleiche wie in Muster 1, also ist es vielleicht in Ordnung: klatschen:

abschließend

Ich denke, es ist selten, ein solches Layout haben zu wollen, aber ich hoffe, es hilft jemandem. Wenn Sie einen anderen guten Weg kennen, lassen Sie es mich bitte wissen: beten Sie:

Ich habe gehört, dass es in Zukunft besser ist, "UICollectionView" als "UITableView" zu verwenden, und es ist möglicherweise nicht mehr gut, die Tabelle zu überladen. .. .. : Denken:

Recommended Posts

Ich möchte den oberen Rand in der UITableView von Grouped entfernen (schnell)
Ich möchte den Wert in Ruby erhalten
Ich möchte eine TraceId in das Protokoll einbetten
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte im gespeicherten Zustand zum selben Bildschirm wechseln
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Kürzen Sie die UUID in Swift auf base64.
Ich möchte @Autowired in Servlet verwenden
Ich möchte JSP in Emacs einfacher als die Standardeinstellung schreiben.
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte bei der Registrierung in der Datenbank eine Fehlermeldung anzeigen
[Swift 5] Verarbeitung zum Schließen der Tastatur in UITableView
[Swift] Ich möchte Gitterlinien (Quadrate) zeichnen.
Ich möchte eine E-Mail in Java senden.
Ich habe versucht, die Sitzung in Rails zu organisieren
Ich möchte den Inhalt der Absicht var_dump
Ich möchte APP_HOME an Logback in Gradle übergeben
rsync4j - Ich möchte rsync in Java berühren.
Ich möchte irgendwann sogar in Kotlin sein
Ich möchte nach dem Dezimalpunkt abschneiden
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Ich war süchtig nach NoSuchMethodError in Cloud-Endpunkten
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte so etwas wie "cls" in Java machen
[Java] Ich möchte die Differenz zum Datum berechnen
Tokoro habe ich in der Migration von Wicket 7 auf 8 umgeschrieben
Ich möchte auch in Laradock Fischschalen verwenden! !!
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte den Dunkelmodus mit der SWT-App verwenden
[Active Admin] Ich möchte den Umfang der Sammlung angeben, die in select_box angezeigt werden soll
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte RadioButtons an derselben Stelle auf dem Bildschirm in derselben RadioGroup platzieren
[Swift] Ich möchte so etwas wie Cs Sprint machen
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Ich möchte Schlangenfälle mit Tabellendefinitionen stoppen
Ich möchte die Hauptmethode mit Reflektion aufrufen
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
[Grober Kommentar] Ich möchte die Zupfmethode heiraten
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
Ich möchte die Protokollausgabe unter Android vereinfachen