wake-up-neo.com

Haben sie UITableVIew in iOS 11 mehr aufgefüllt?

Sind es nur ich oder sie haben den Kopf- und Fußzeilen von gruppierten UITableViews in iOS 11 viel mehr Polsterung hinzugefügt?

Ich kompilierte meine App für iOS 11 und bemerkte die zusätzliche Polsterung ..__ Ich löste es irgendwie, indem Sie contentInset.top auf einen negativen Wert setzen, wenn OS 11 als Betriebssystem vorliegt. Dies ist jedoch eine hässliche Lösung.

Gibt es eine andere bessere Möglichkeit, die zusätzliche Auffüllung gruppierter Tabellenansichten zu löschen, um dieselben Ergebnisse für alle unterstützten iOS-Geräte zu erzielen? Es stinkt irgendwie, dass man für so ein Dummkopf mehrere Prüfungen hat.

Screenshot zum Vergleich:

 iOS 10 vs iOS 11 UITableView comparison

Wie Sie sehen, gibt es unter iOS 11 zusätzliche Abstände zwischen den Abschnitten (yeah, das sind Abschnitte!).

8
Phillip

Dies ist der neue Parameter contentInsetAdjustmentBehavior von UIScrollView, den Sie als .never einstellen können, um zusätzliches Auffüllen zu verhindern

if #available(iOS 11.0, *) {
    tableView.contentInsetAdjustmentBehavior = .never
}

oder im Storyboard unter Größeninspektor

 enter image description here

12
Rashid

In iOS 11 hat die Abschnittsfußzeile eine Ansicht, die den Abstand zwischen den Abschnitten erhöht. Sie müssen die Ansicht der Fußzeile explizit auf null setzen, zusätzlich zur Höhe der Fußzeile:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    return nil;
}

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

Dadurch wird Ihre Tabellenansicht so aussehen, wie Sie sie in iOS 10 hatten, und dies hat auch keine Auswirkungen auf vorherige Versionen von iOS. Sie können dasselbe für die Kopfzeile tun, wenn Sie die Kopfzeilen nicht benötigen.

3
Bms270

Sie müssen lediglich die Kopf- und Fußzeilenansicht der Tabellenansicht festlegen.

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] init];
}
- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] init];
}
2
wangjx

Bei meinem .grouped UITableView stand ich in iOS 11 vor demselben Problem. Es funktionierte gut, wenn ich eine UITableViewController verwendete, aber nicht in UIViewController.

tableView.estimatedSectionHeaderHeight = 0

Ohne obige Zeile wird tableView(heightForHeaderInSection nie aufgerufen.

Es scheint ein Fehler in iOS 11 zu sein.

0
AamirR

Ich habe mein Problem durch Einstellen der Kopf- und Fußzeilenhöhe im Storyboard gelöst. Offensichtlich sind dies in Xcode 9 die Standardwerte beim Erstellen einer UITableView

 enter image description here

Ich habe versucht, sie auf 0 zu setzen, aber 1 ist das Minimum und hat das Problem gelöst. Ich habe auch überprüft, wie es sich verhält, wenn automatic geprüft wird und es auch funktioniert.

Ich weiß auch nicht, ob es ein Fehler ist oder so, aber ich konnte es nicht auf einem vorhandenen Tisch tun. Ich musste es löschen und erneut auf UIViewController ziehen.

0

Wenn die Antwort von rashid nicht mit der Einstellung von contentInsetAdjustmentBehavior auf nie funktioniert, versuchen Sie Folgendes:

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0
self.tableView.estimatedSectionFooterHeight = 0

iOS 11 Floating TableView-Header

0
Luca Ventura

Ich hatte ein ähnliches Problem, ich glaube es war ein Fehler im alten Xcode.

Wenn Sie Autolayout verwenden und Inhaltsansicht und Ansichten enthalten, funktionierte die Option Auf Ränder beschränken nicht in Xcode 8, jetzt in xCode 9 behoben Zellen anzeigen. Dies ist dann auf allen Geräten von iOS 10 und iOS 11 konsistent. 

 enter image description here