UITableView + Inhaltsoffset oben hinzufügen

86

Ich muss oben in meiner UITableView eine Leerstelle hinzufügen, die sich nicht auf die Größe des Inhaltsbereichs auswirkt. Das Verschieben des Inhalts nach unten oder das Hinzufügen einer leeren Zelle ist NICHT das, was ich tun möchte. Stattdessen möchte ich nur einen Offset.

Wie?

bluefloyd8
quelle

Antworten:

288

Ich bin mir nicht sicher, ob ich dir folge, aber ich glaube, ich habe die gleiche Situation. In meinem Fall muss ich der ADBannerView am oberen Bildschirmrand etwas Platz geben, damit ich die von mir hinzugefügte viewDidLoad-Methode verwenden kann:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

Die Werte sind UIEdgeInsetsMake (oben, links, unten, rechts).

Alternativ das gleiche mit Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
Jigzat
quelle
1
Dies wurde benötigt, um oben keine "Lade" -Zelle anzuzeigen. Wechseln Sie beim Rendern dieser Zelle zurück zum Ego-Einschub und beim Auftreten von reloadData wieder zu -50 oben. Vielen Dank !
Daniel
22
Möglicherweise möchten Sie auch die Bildlaufanzeige anpassen: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
Bdev
8
Ja, oder noch besser, passen Sie die Bildlaufanzeige wie folgt an: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez
5

Sie können der Tabelle eine "leere" Kopfansicht hinzufügen ... dies würde dem ursprünglichen Erscheinungsbild der Tabelle einen Versatz geben, aber sobald Sie mit dem Scrollen begonnen haben, wäre der Versatz verschwunden. Ich bin mir nicht sicher, ob du das willst.

Wenn Sie einen permanenten Versatz benötigen und noch keine Abschnittsüberschriften verwenden, können Sie den Versatz ähnlich wie oben erstellen, indem Sie benutzerdefinierte Ansichten für die Abschnittsüberschriften erstellen. Insbesondere wenn Sie nur einen Abschnitt haben, kann dies den Eindruck eines permanenten Versatzes erwecken .

Ich kann Beispielcode posten, wenn es so klingt, als ob einer von beiden das ist, wonach Sie suchen.

scottbates22
quelle
4

Ich kombinierte Jigzats Antwort mit:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

im

- (void)viewDidLoad

Die erste Zelle befindet sich also nicht oben.

reich
quelle
4

Swift 5.1

Fügen Sie in viewDidLoad Folgendes hinzu

tableView.contentInset.top = 100

Das ist wirklich alles.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}
Rom4in
quelle
2

Klingt so, als ob Sie eine "Ansicht" um Ihre UITableView. Wenn Sie eine UITableViewControllerin IB haben, UITableViewwird die automatisch auf die viewvon gesetzt UITableViewController. Sie ändern die viewEigenschaft in eine normale Eigenschaft UIViewund fügen Ihre UITableViewdort hinzu und geben ihr einen Versatz.

--- Bearbeiten --- Ich habe gerade meinen Beitrag gelesen und dachte, dass es wenig Sinn macht :) Wenn Sie einen erstellen, erhalten UITableViewControllerSie diesen (im Pseudocode):

UITableViewController.view = UITableView

Dies bedeutet, dass die eigentliche Tabelle den gesamten Speicherplatz einnimmt und Sie nicht einmal andere Ansichten hinzufügen können. Sie müssen also das ändern

UITableViewController.view = UIView

und fügen Sie Ihre Tabelle hinzu UIView

willcodejavaforfood
quelle
0

Ich habe diese Antwort mit der folgenden kombiniert: https://stackoverflow.com/a/9450345/1993937

Damit die Tabellenansicht oben im Inhaltseinsatz angezeigt wird, wird der Platz oben nicht abgeschnitten, indem die Tabellenansicht beim ersten Anzeigen der Ansicht leicht nach unten gescrollt wird. (18 ist meine oberste Lücke)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
TheJeff
quelle