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

44voto

Aqib Mumtaz Punkte 4828

Bei Verwendung einer gruppierten TableView verwenden Sie dies, um das Abschneiden des Rahmens in viewWillAppear zu vermeiden

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);

40voto

girish_vr Punkte 3031

Laut diesem Übergangsführer für iOS7 von Apple werden die Inhaltsabstände des Scroll-Views automatisch angepasst. Der Standardwert von automaticallyAdjustsScrollViewInsets ist auf JA gesetzt.

Das UIViewController, das die UITableView hat, sollte diese Eigenschaft auf NEIN setzen.

self.automaticallyAdjustsScrollViewInsets = NO;

Das wird funktionieren.

BEARBEITEN 1:

Man könnte auch versuchen -

self.navigationController.navigationBar.translucent = YES;

Dies entfernt auch den zusätzlichen Abstand oben.

39voto

Aurelien Porte Punkte 2612

Die meisten der vorherigen Antworten oben sind zu hacky. Sie würden jederzeit in der Zukunft kaputt gehen, wenn Apple beschließt, dieses unerwartete Verhalten zu beheben.

Wurzel des Problems:

  1. Ein UITableView mag es nicht, eine Überschrift mit einer Höhe von 0,0 zu haben. Wenn Sie versuchen, eine Überschrift mit einer Höhe von 0 zu haben, können Sie zur Lösung springen.

  2. Auch wenn Sie später eine Höhe ungleich 0,0 Ihrer Überschrift zuweisen, mag ein UITableView es nicht, anfangs eine Überschrift mit einer Höhe von 0,0 zugewiesen zu bekommen.

Lösung:

Die einfachste und zuverlässigste Lösung ist sicherzustellen, dass die Höhe Ihrer Überschrift nicht 0 ist, wenn Sie sie Ihrem TableView zuweisen.

Etwas in dieser Art würde funktionieren:

// Ersetzen Sie UIView durch die Klasse, die Sie als Ihre Überschrift verwenden:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.tableView.bounds.size.width, CGFLOAT_MIN)];
self.tableView.tableHeaderView = tableViewHeaderView;

Etwas in dieser Art würde früher oder später zu dem Problem führen (typischerweise nach einem Scrollen):

// Ersetzen Sie UIView durch die Klasse, die Sie als Ihre Überschrift verwenden:
UIView *tableViewHeaderView = [[UIView alloc] initWithFrame:CGRectZero];
self.tableView.tableHeaderView = tableViewHeaderView;

29voto

Storyboard:

Nur das Kontrollkästchen deaktivieren: Scrollansichtsränder anpassen in den Optionen des Ansichts-Controllers

Bildbeschreibung hier eingeben

Code:

self.automaticallyAdjustsScrollViewInsets = false

28voto

Vipul Kumar Punkte 793

Dieser Code hat für mich funktioniert, die beste Antwort für mich, die in objective-C in der oberen Hälfte geschrieben wurde, habe ich in Swift umgewandelt.

Für Swift 4.0+

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.bounds.size.width, height: .leastNonzeroMagnitude))

Schreiben Sie dies einfach in viewDidLoad() und es wird wie ein Zauber funktionieren.

Für iOS 15+ wird das oben genannte nicht funktionieren, also verwenden Sie dies:-

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

Für iOS 15+, wenn Sie die Änderung in Ihrem gesamten Projekt anwenden möchten, verwenden Sie dies:-

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

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

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