732 Stimmen

Warum gibt es zusätzlichen Abstand oben auf meiner UITableView mit dem Style UITableViewStyleGrouped in iOS7?

Ab iOS 7 gibt es zusätzlichen Platz oben auf meinen UITableView's, die den Style UITableViewStyleGrouped haben.

Hier ist ein Beispiel:

Bildbeschreibung hier eingeben

Die Tabelle beginnt beim ersten Pfeil, es gibt 35 Pixel unerklärlichen Abstand, dann ist der grüne Header eine UIView, die von viewForHeaderInSection zurückgegeben wird (wo die Sektion 0 ist).

Kann jemand erklären, woher diese 35 Pixel kommen und wie ich sie loswerden kann, ohne zu UITableViewStylePlain zu wechseln?


Update (Antwort):

In iOS 11 und später:

tableView.contentInsetAdjustmentBehavior = .never

107voto

Levan Karanadze Punkte 749

Lösung für iOS 15:

if #available(iOS 15.0, *) {
  tableView.sectionHeaderTopPadding = 0
}

Um das Problem im gesamten Projekt zu beheben:

if #available(iOS 15.0, *) {
    UITableView.appearance().sectionHeaderTopPadding = 0
}

Weitere Details: Zusätzlicher Abstand über Tabellenansichtskopfzeilen in iOS 15

Hinweis: Dies gilt nur für UITableView.Style.plain.

81voto

LightMan Punkte 3327

Sie könnten feststellen, ob Ihre App unter iOS 7 oder höher läuft, und diese beiden Methoden in Ihren Tabellenansichtsdelegierten hinzufügen (normalerweise im Code Ihres UIViewControllers).

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

Dies ist vielleicht keine elegante Lösung, aber für mich funktioniert es.

Swift Version:

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return CGFloat.leastNormalMagnitude
}

60voto

esilver Punkte 26370

Ich habe die Ursache meines ursprünglichen Fehlers gefunden und ein Beispielprojekt erstellt, das ihn zeigt. Ich glaube, es handelt sich um einen Fehler in iOS7.

Ab iOS7 gibt es einen Fehler: Wenn Sie eine UITableView mit dem Gruppiert-Stil erstellen, aber beim ersten Layout keinen Delegaten festlegen, dann einen Delegaten festlegen und reloadData aufrufen, gibt es einen 35px Platz oben, der nie verschwinden wird.

Siehe dieses Projekt, das ich erstellt habe, um den Fehler zu zeigen: https://github.com/esilverberg/TableViewDelayedDelegateBug

Insbesondere diese Datei: https://github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m

Wenn Zeile 24 aktiv ist,

[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];

wird oben ein zusätzlicher 35 px Platz sein. Wenn Zeile 27 aktiv ist und Zeile 24 auskommentiert ist,

self.tableView.delegate = self;

kein Platz oben. Es ist, als ob die tableView irgendwo ein Ergebnis zwischengespeichert und sich nach Festlegen des Delegaten und Aufrufen von reloadData nicht neu zeichnet.

50voto

Tú Đt Punkte 539

Deaktivieren Sie "Einstellungen für das Verschieben von Inhalts-Insets anpassen"

Bildbeschreibung hier eingeben

46voto

Mike Gledhill Punkte 25646

Ein weiterer schneller Kommentar... selbst in XCode 6.1 gibt es einen Bug mit vertikalen Abständen, die oben auf UIScrollViews, UITextViews und UITableViews erscheinen.

Bildbeschreibung hier eingeben

Manchmal ist der einzige Weg, dieses Problem zu beheben, in den Storyboard zu gehen und das problematische Steuerelement so zu verschieben, dass es nicht mehr das erste Unteransichtselement auf der Seite ist.

Bildbeschreibung hier eingeben

(Mein Dank an Oded für den Hinweis in diese Richtung... Ich poste diesen Kommentar nur, um ein paar Screenshots hinzuzufügen, um die Symptome und die Lösung zu demonstrieren.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X