Da sich das Design von Tabellenansichten mit dem gruppierten Stil mit iOS 7 erheblich geändert hat, möchte ich den Header des ersten Abschnitts ausblenden (oder entfernen). Bisher habe ich es nicht geschafft.
Etwas vereinfacht sieht mein Code folgendermaßen aus:
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return 0.0f;
return 32.0f;
}
- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (section == 0) {
UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 640.0f, 0.0f)];
return view;
}
return nil;
}
- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return nil;
} else {
// return some string here ...
}
}
Wenn ich eine Höhe von 0 zurückgebe, werden die beiden anderen Methoden niemals mit dem Abschnittsindex 0 aufgerufen. Es wird jedoch weiterhin ein leerer Abschnittskopf mit der Standardhöhe gezeichnet. (In iOS 6 werden die beiden Methoden aufgerufen. Das sichtbare Ergebnis ist jedoch dasselbe.)
Wenn ich einen anderen Wert zurückgebe, erhält der Abschnittskopf die angegebene Höhe.
Wenn ich 0,01 zurückgebe, ist es fast richtig. Wenn ich jedoch im Simulator "Farbfehlausgerichtete Bilder" aktiviere, werden alle Zellen der Tabellenansicht markiert (was eine logische Konsequenz zu sein scheint).
Die Antworten auf die Frage UITableView: Header vor leerem Abschnitt ausblenden scheinen darauf hinzudeuten, dass es einigen Personen gelungen ist, den Header des Abschnitts auszublenden. Dies kann jedoch auch für den einfachen Stil gelten (anstelle des gruppierten Stils).
Der bisher beste Kompromiss ist die Rückgabe der Höhe 0,5, was zu einer etwas dickeren Linie unterhalb der Navigationsleiste führt. Ich würde mich jedoch freuen, wenn jemand weiß, wie der Header des ersten Abschnitts vollständig ausgeblendet werden kann.
Aktualisieren
Laut der Analyse von caglar ( https://stackoverflow.com/a/19056823/413337 ) tritt das Problem nur auf, wenn die Tabellenansicht in einem Navigationscontroller enthalten ist.
quelle
section == 0
.Antworten:
Ich habe eine Problemumgehung, die mir einigermaßen sauber erscheint. Also beantworte ich meine eigene Frage.
Da 0 als Höhe der Kopfzeile des ersten Abschnitts nicht funktioniert, gebe ich 1 zurück. Dann verwende ich das contentInset , um diese Höhe unter der Navigationsleiste auszublenden.
Ziel c:
Schnell:
quelle
CGFLOAT_MIN
anstelle eines fest codierten Werts zu verwenden. Mit anderen Worten, nichtreturn 1.0f
oder0.1f
stattdessen:return CGFLOAT_MIN
Wenn Apple jemals den akzeptablen Mindestwert ändert, müssen Sie den Code ändern, wenn Sie den Rückgabewert fest codieren. Außerdem wissen Sie bereits nicht, ob Sie den kleinstmöglichen Wert verwenden. Wenn Sie die definierte Konstante verwenden, wird garantiert der kleinstmögliche Wert verwendet, und Ihr Code überlebt Änderungen am Betriebssystem.So wird der erste Abschnittskopf in UITableView (gruppierter Stil) ausgeblendet.
Swift 3.0 & Xcode 8.0 Lösung
Der Delegat von TableView sollte die Methode heightForHeaderInSection implementieren
Geben Sie innerhalb der heightForHeaderInSection-Methode die am wenigsten positive Zahl zurück. (nicht Null!)
quelle
CGFLOAT_MIN
denn objc ist identisch mitCGFloat.leastNonzeroMagnitude
in SwiftDie Antwort war sehr lustig für mich und mein Team und wirkte wie ein Zauber
GRUND:
Wir haben festgestellt, dass dies nur für die erste Ansicht in der Ansichtshierarchie geschieht, wenn diese erste Ansicht eine UITableView ist . Alle anderen ähnlichen UITableViews haben diesen nervigen Abschnitt außer dem ersten nicht. Wir haben versucht, UITableView von der ersten Stelle in der Ansichtshierarchie zu entfernen, und alles hat wie erwartet funktioniert.
quelle
contentInset
um zum Beispiel{0, 64, 0, 0}
der 64px von oben (Statusleiste und Navigationsleiste) versetzt zu haben. Die tableView muss oben am Bildschirm angehängt werden, nicht die topLayoutGuide (damit sie unter die Navigationsleiste gelangt)Verwenden Sie diesen Trick für den gruppierten Typ tableView
Kopieren Sie den folgenden Code für Ihre Tabellenansicht in die viewDidLoad- Methode:
quelle
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 1)]
.Dieser Weg ist in Ordnung.
quelle
Ich habe gerade Ihren Code kopiert und versucht. Es läuft normal (im Simulator ausprobiert). Ich habe die Ergebnisansicht angehängt. Du willst so eine Ansicht, oder? Oder habe ich dein Problem falsch verstanden?
quelle
Swift3: heightForHeaderInSection funktioniert mit 0, Sie müssen nur sicherstellen, dass der Header auf clipsToBounds gesetzt ist.
Wenn Sie clipsToBounds nicht festlegen, wird beim Scrollen der versteckte Header angezeigt.
quelle
Update [19.9.17]: Die alte Antwort funktioniert in iOS 11 nicht mehr für mich. Danke Apple. Folgendes tat:
Vorherige Antwort:
Wie in den Kommentaren von Chris Ostomo gepostet, hat Folgendes für mich funktioniert:
quelle
So entfernen Sie den Header des oberen Abschnitts in einer gruppierten UITableView in Swift:
quelle
In Swift 4.2 und vielen früheren Versionen können Sie, anstatt die Höhe des ersten Headers wie in den anderen Antworten auf 0 zu setzen, einfach die anderen Header auf setzen
nil
. Angenommen, Sie haben zwei Abschnitte und möchten nur, dass der zweite (dh1
) einen Header enthält. Diese Überschrift enthält den Text Foobar :quelle
Versuchen Sie dies, wenn Sie alle Abschnittsüberschriften vollständig entfernen möchten
quelle
Ich kann noch keinen Kommentar abgeben, dachte aber, ich würde hinzufügen, dass das Einstellen der Höhe des ersten Abschnitts auf 0 in tatsächlich funktioniert , wenn Sie einen
UISearchController
auf Ihrem ControllerUISearchBar
als IhrentableHeaderView
habenheightForHeaderInSection
.Ich benutze,
self.tableView.contentOffset = CGPointMake(0, self.searchController.searchBar.frame.size.height);
damit die Suchleiste standardmäßig ausgeblendet ist.Das Ergebnis ist, dass für den ersten Abschnitt keine Überschrift vorhanden ist. Wenn Sie nach unten scrollen, wird die Suchleiste direkt über der ersten Zeile angezeigt.
quelle
Bei weitem am einfachsten ist es, zurückzukehren
nil
oder""
infunc tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
einen Abschnitt zu gelangen, in dem Sie keine Kopfzeile anzeigen möchten.quelle
Swift-Version: Swift 5.1
Meistens können Sie die Höhe in tableView-Delegaten wie folgt festlegen:
Wenn Sie UITableView mit Xib oder Storyboard erstellt haben, funktioniert die Antwort von up manchmal nicht. Sie können die zweite Lösung ausprobieren:
Hoffe es funktioniert bei dir!
quelle