Wie positioniert UITableViewCell am unteren Bildschirmrand?
Gibt es ein bis drei UITableViewCell
s in einem UITableViewView
. Gibt es eine Möglichkeit, positionieren Sie die Zelle(N) an der Unterseite des Bildschirms nach reloadData
?
+----------------+ +----------------+ +----------------+
| | | | | |
| | | | | |
| | | | | |
| | | | | +------------+ |
| | | | | | cell 1 | |
| | | | | +------------+ |
| | | +------------+ | | +------------+ |
| | | | cell 1 | | | | cell 2 | |
| | | +------------+ | | +------------+ |
| +------------+ | | +------------+ | | +------------+ |
| | cell 1 | | | | cell 2 | | | | cell 3 | |
| +------------+ | | +------------+ | | +------------+ |
+----------------+ +----------------+ +----------------+
- Würde das scrollen aktiviert werden?
- scrollen ist egal wie lange die Letzte Zelle unten
- Verändert sich die Höhe der Zelle konstant?
- Sie können davon ausgehen, ja.
- Man konnte immer den Tisch drehen, Kopf nach unten und drehen Sie dann die Zellen entgegenzuwirken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich erstellen Sie eine neue sample-Lösung, da die Vorherige Antwort ist nicht veraltet für die moderne Nutzung.
Die neueste Technik, die verwendet autolayout und selbst-sizing-Zellen, so dass die Vorherige Antwort nicht mehr funktionieren würde. Überarbeitete ich die Lösung für die Arbeit mit modernen Funktionen und erstellt ein Beispiel-Projekt, um auf GitHub.
Statt zu zählen, bis Sie die Höhe jeder Zeile, die bewirkt, dass zusätzliche arbeiten, dieser code ruft stattdessen den Rahmen für die Letzte Zeile, so dass der Inhalt Einschub von oben berechnet werden kann. Es nutzt, was die Tabellenansicht ist schon dabei, so dass keine zusätzlichen arbeiten notwendig.
Dieser code auch nur die sets der oberen Versatz im Fall der untere Einschub ist für die Tastatur oder ein anderes overlay.
Bitte melden Sie alle bugs oder reichen die Verbesserungen auf GitHub und ich werde zu aktualisieren, in diesem Beispiel.
GitHub: https://github.com/brennanMKE/BottomTable
tableView.contentInset = contentInset;
Rufen Sie diese Methode auf, wenn eine Zeile Hinzugefügt wird:
self.tableView.contentInset = UIEdgeInsetsMake(MAX(0.0, self.tableView.bounds.size.height - self.tableView.contentSize.height), 0, 0, 0);
. Tabelle-Ansicht Inhalt ist die Größe aller Zellen.Können Sie eine Kopfzeile in der Tabelle anzeigen und machen es groß genug, um schieben Sie die erste Zelle nach unten. Legen Sie dann die contentOffset Ihrer tableView entsprechend. Ich glaube nicht, dass es eine schnelle eingebaute Möglichkeit, dies zu tun, obwohl.
Ich wusste nicht, wie leer-Zelle
contentInset
odertransform
basierte Lösungen, stattdessen kam ich auf eine andere Lösung:UITableView
's layout ist privat und jederzeit ändern, wenn Apple es wünscht, es ist besser, die volle Kontrolle damit Sie Ihre code zukunftssicherer und flexibler. Ich wechselte zuUICollectionView
und implementiert spezielle layout basiert aufUICollectionViewFlowLayout
für die Swift (3):Es funktioniert sehr gut für meine Fälle und, offensichtlich, kann optimiert werden, indem irgendwie die Zwischenspeicherung von Inhalten die Größe Höhe. Auch bin ich mir nicht sicher, wie Sie wird, die Sie durchführen, ohne Optimierungen auf große Datensätze, die ich nicht testen. Ich habe Beispiel-Projekt mit der demo: MDBottomSnappingCells.
Hier ist die Objective-C version:
Hier ist die Swift 3-version des @Brennan akzeptierte Lösung gefunden, getestet und für gut befunden 🙂
Diese kann getan werden, durch die im swift mit unten funcation
VERWENDEN SIE DIESE. Dies wird sich sicherlich helfen.
Würde ich verkleinern und neu zu positionieren die UITableView in der übergeordneten Ansicht je nach Anzahl der Zellen. Ich denke, es ist die Lösung beinhaltet, dass mindestens workarounds.
Also, tun Sie wirklich brauchen, um eine UITableView?
Fügen Sie eine leere Zelle in einen neuen Abschnitt und machen Sie den Abschnitt mit dem index null.
Nun in
Nun
Nun fügen Sie diese, wo Sie neu geladen werden tableView
Es funktionierte für mich. Hoffe, das hilft.
Elegante und schnelle Lösung, ohne eine Zeile code.
Verwendung der container-Ansicht und setzen Sie UITableViewController in container( einbetten segue ).
Können Sie eine beliebige Höhe, die Sie wollen, um zu diesem container.
Der beste Weg, dies zu tun, fand ich zu beachten ist die Größe des Inhalts der tableview und stellen Sie die Einpresstiefe, falls erforderlich. Zum Beispiel:
Alle Antworten bekam einige Macken, die mit der dynamischen rowHeight-und/oder Animationen.
Für mich ist die am besten funktionierende Lösung war eine transformation der Tabelle (flipY):
innen
cellForRowAt
:Können Sie auch die Rückseite Ihrer Daten-array und können auch flip-section-header/footer.
Auch Ihre Fußzeile wird Ihr neues header - aber hey, es funktioniert.
Ich verwendet @bkokot Lösung mit wenig Zusatz. Es gibt zwei Dinge, die