UITableView Footer, Stoppen Sie das Schweben über den Inhalt

70

Ich möchte, dass meine UITableView-Fußzeile nicht mehr über meinen Inhalten schwebt, wie dies die Standardaktivität ist. Ich möchte, dass meine Fußzeile ... nun ... eine Fußzeile ist. Immer die letzte Ansicht, die am Ende meiner Tabellenansicht angezeigt wird. :) :)

Das Gleiche gilt auch für den Header.

Gibt es eine einfache Möglichkeit, das Schweben über der Tabellenansicht beim Scrollen zu deaktivieren?

Vielen Dank an alle, ich konnte anderswo keine Antwort finden.

Jason
quelle

Antworten:

121

Ok, es stellt sich heraus, dass blahblahtableView.tableFooterView = someview; die Fußzeile nicht mit der Tabelle gescrollt wird , wenn Sie die Fußzeilenansicht über einstellen.

Wenn Sie Ihre Fußzeile jedoch mit erstellen viewForFooterInSection, folgt sie Ihrer Ansicht und bleibt am unteren Bildschirmrand hängen.

Ich bin mir nicht sicher, warum ich diese Antwort nicht früher finden konnte. Sorry alle :)

Jason
quelle
61
Das sind zwei verschiedene Dinge: tableFooterView ist die Fußzeile für die gesamte Tabelle. viewForFooterInSection ist die Fußzeile für den angegebenen Abschnitt
user102008
2
Was ist, wenn ich mehrere Abschnitte in einer Tabellenansicht habe?
Nonamelive
18
Eigentlich ist das Gegenteil. Damit die Fußzeile über der Tabelle schwebt, müssen Sie sie verwenden viewForFooterInSection. Andernfalls müssen Sie die Fußzeile unten halten und mit der benötigten Tabelle scrollen self.tableView.tableFooterView = footerView.
Fred Collins
1
Es ist ein seltsames Verhalten der Fußzeile: Ich weise eine kleine Bildansicht zu und der Rahmen macht wirklich die Hölle .: \
Gaussblurinc
1
Was ist, wenn Sie das Schweben verhindern möchten, aber mehr als einen Abschnitt haben und die Fußzeile im ersten Abschnitt angezeigt werden soll?
Mikrobi
33
- (id)init {
    self = [self initWithStyle:UITableViewStyleGrouped]; //Default is UITableViewStylePlain
    return self;
}
Guogangj
quelle
8
Dies kann auch mit dem StoryBoard erfolgen, danke +1
Ahsan Ebrahim
31

Sie haben zwei Arten von Fußzeilen: eine ist die Abschnittsfußzeile und die andere ist die Fußzeile Tabellenansicht .

Die Fußzeile des Abschnitts wird unter jedem Abschnitt angezeigt . Auf der anderen Seite wird die Fußzeile der Tabellenansicht nur einmal am Ende der Tabellenansicht angezeigt .

Es gibt keine 1-Klick-Möglichkeit, das Schweben der Abschnittsfußzeile zu deaktivieren.

Wenn Sie eine "Fußzeile" möchten, die immer als letzte Zelle ihres Abschnitts angezeigt wird und am unteren Rand der Tabellenansicht fixiert wird, müssen Sie Ihrem Abschnitt eine zusätzliche Zelle hinzufügen und sie immer als die letzte Ihres Abschnitts behandeln.

Wenn Sie nur einen Abschnitt in Ihrer Tabellenansicht haben, können Sie die Fußzeile der Tabellenansicht als Fußzeile verwenden.

rsc
quelle
1
Gemäß den anderen Antworten auf diese Frage können Sie das Schweben der Abschnittsfußzeile in "1-Klick" deaktivieren, indem Sie den Stil der Tabellenansicht auf UITableView.Style.grouped setzen, entweder in Code oder in XIB / Storyboard.
Importieren Sie diese
4
self.YOUR_TABLE_VIEW.tableFooterView = YOUR_FOOTER_VIEW;
Zulqarnain
quelle
4

Wenn Sie Ihre Zellen in Abschnitte unterteilt haben und die Funktion verwenden:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView?

Um Ihre Fußzeile festzulegen, können Sie in IB auch den UITableView-Stil auf Gruppiert setzen. Dies ist eine weitere mögliche Lösung!

megu5202
quelle
0

Wenn ich die Frage richtig gestellt habe, möchten Sie im Grunde die Fußzeile / Kopfzeile korrigieren und alles andere scrollen? In diesem Fall könnten Sie nur die Kopf- und Fußzeile als separate Ansichten von der Tabellenansicht haben, die in der Ansichtshierarchie über der Tabellenansicht liegen, sodass sie den Inhalt der Tabellenansicht abdecken.

Wenn Sie möchten, dass sie mit der Tabellenansicht springen (wenn Sie über oder unter den Inhalt scrollen), müssen Sie die Methode der Tabellenansicht verfolgen (die Tabellenansicht ist eine Unterklasse der Bildlaufansicht, damit sie funktioniert) - (void)scrollViewDidScroll:und die neue Position entweder in der Fußzeile oder in der Header drin.

Ich hoffe, Sie erhalten meine Antwort. Ich habe etwas Ähnliches getan und es hat funktioniert (ich wollte, dass das "Release to Update" -Ding oben auf der Tabellenansicht angezeigt wird.)

Henri Normak
quelle
Eher das Gegenteil ... Ich möchte, dass die Fußzeile / Kopfzeile in jeder Hinsicht als erste und letzte Zelle der Tabellenansicht fungiert :) ... Ich bin ein bisschen neblig, wenn Ihre Antwort dazu beitragen könnte, dies zu erreichen, um ehrlich zu sein.
Jason
1
Was ist dann das Problem? Haben Sie sie einfach als erste und letzte Zelle, das war's. Oder Sie können sie einfach als headerView / footerView verwenden. Was vermisse ich oder erzählst du nicht? : P
Henri Normak
Nun, das Problem ist, dass sie eine bestimmte Höhe haben müssen, die sich von den übrigen Zellen unterscheidet, und ich möchte nicht die Last übernehmen, die cellheightforrow-Methode auszuführen (in großen Tabellen wird angegeben, dass es zu einer Leistungsverschlechterung kommt). - Haben Sie sie als Kopf- / Fußzeile? Ich habe sie als Kopf- / Fußzeile mit viewForFooterInSection ... aber sie bleiben beim Scrollen in der Tabelle am unteren Bildschirmrand hängen (
Jason
1
Wow .. das war einfach .. ich musste nur die Fußzeilenansicht anstelle der Ansicht für die Abschnittsfußzeile einstellen ... wow
Jason
Ich bin froh, dass es geklappt hat, das habe ich mir bei footerView / headerView gedacht. Dies sind zwei Eigenschaften der Tabellenansicht.
Henri Normak
0

Ich hatte ein ähnliches Problem. Ich habe nur eine Fußzeile verwendet, um die Anzahl der Zellen in der Tabelle unten anzugeben. Aber es wurde nicht wie erwartet mit den Tisch-Cels gescrollt (es war jederzeit oben auf dem Tisch sichtbar, bis ich den Boden erreichte, an dem es abprallt).

Meine Lösung, um dies zu überwinden, bestand darin, zwei Abschnitte zu erstellen, von denen einer die Tabellenzellen und ein weiterer leere ABER mit einem Header enthält. Dieser Header zeigt den Zähler und verhält sich wie gewünscht (um immer am Ende der Tabelle zu bleiben, anstatt die Zellen zu überlagern).

Die empfohlene Lösung, eine Dummy-Zelle am unteren Rand hinzuzufügen, war in meinem Fall nicht sinnvoll, da sie mit dem verdrahteten Rand der Tabelle begrenzt wäre, und das wollte ich nicht.

Hoffe das hilft

Abolfoooud
quelle
0

#pragma mark - Es gibt zwei Möglichkeiten, dies zu tun -

  1. Verwenden Sie den UITableView-Delegaten

    Effekt: Schwebende Fußzeile in einer Tabellenansicht

-(CGFloat)tableView:(UITableView *)tableView
heightForFooterInSection:(NSInteger)section{
    return HEIGHT;
}
-(UIView*)tableView:(UITableView *)tableView
viewForFooterInSection:(NSInteger)section{
    return FOOTERVIEW
}
  1. Verwenden Sie den Setter der Tabellenansicht

    Effekt: Wird unten in der letzten Zelle angebracht

theTableView.tableFooterView = YOURFOOTERVIEW

// Do not set this delegate
// or you would get a extra blank at the bottom of the table

//  -(CGFloat)tableView:(UITableView *)tableView
//  heightForFooterInSection:(NSInteger)section{
//    return HEIGHT;
//  }
Exile3daime
quelle