Für alle, die Abschnitte zu verstecken, weil sie ein statisches gruppierten Tableview mit einer dynamischen Anzahl von Abschnitten verwendet, kann die Lösung unter der Hilfe sein. In meinem Fall musste jeder Abschnitt mit anzuzeigenden Daten einen benutzerdefinierten Header haben. Jeder Abschnitt, der keine Daten enthielt, musste vollständig ausgeblendet werden.
Die obige Antwort war in meinem Szenario sehr hilfreich. Für diejenigen, die nicht immer wissen, welche Abschnitte hier versteckt werden müssen, ist eine Lösung für Sie, die auf dem oben genannten basiert.
In meinem Szenario habe ich bis zu 12 Einträge in einem Array, das ich in bis zu 12 Abschnitten (neben anderen Abschnitten in einer gruppierten TableView) anzeigen möchte. Wenn weniger als 12 Einträge angezeigt werden sollen, möchte ich die unnötigen Abschnitte ausblenden, indem ich ihnen 0 Höhe und 0 Zeilen gebe. Ich wollte auch den HeaderView ausblenden.
Um dies zu tun, ich habe folgendes:
- Ihre Tableview gemäß der ausgezeichnete Antwort einrichten @sasquatch oben gab.
- Überprüfen Sie in den Funktionen numberOfRowsInSection (Abschnitt: Int) und tableView (_ tableView: UITableView, heightForHeaderInSection: Int), ob die Zeilen/Höhe 0 sein sollen.
In meinem Fall war ich Abschnitt 1 unter Verwendung von - 12 für meine dynamischen Daten so I-Code verwendet, wie unten:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
//For section 0 and 13, just 1 row is ok
if section == 0 || section == 13 {
return 1
}
//For sections 1 - 12, determine if we have data to populate it, or if we should hide it
if section <= dynamicDataToDisplay.count {
return 2
}
//If it's section 1 - 12, but we don't have a corresponding data entry in dynamicDataToDisplay, then just return 0 rows
return 0
}
Der Code für die heightForHeader Funktion ist ähnlich in der Logik:
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
switch section {
case 0:
return 45.0
case 13:
return UITableViewAutomaticDimension
default:
if dynamicDataToDisplay.count >= section {
return 25.0
} else {
return 0.0
}
} //end switch
}
Auch nach dem Einrichten dieser Funktionen habe ich festgestellt, dass immer noch Kopfzeilen für die Abschnitte angezeigt wurden, die ich ausblenden wollte. Ich denke, ich dachte, dass viewForHeaderInSection nicht aufgerufen würde, wenn die NummerOfRows 0 und HöheOfHeader auch 0 war, aber es wurde noch immer aufgerufen.
die folgende Hinzufügen dazu beigetragen, dass der Header nicht unnötig erstellt wurde:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
//set up header for dynamic data sections
if 1 ... 12 ~= section {
if tableView.numberOfRows(inSection: section) == 0 {
return nil
}
//Continue with the header set up for valid sections with rows to display data
......
}
}
Diese Lösung könnte jemand helfen, die immer noch einen Header wird immer trotz seiner Höhe erstellt werden und Reihen gesetzt wird auf 0
Was ist, wenn das TableView statisch ist (ein paar fest codierte Zeilen, die sich voneinander unterscheiden, wie ein Einstellungsfenster)? – Josh
Ab Xcode 7.3, Swift 2.2: als Alternative zu 'tableView (_: heightForHeaderInSection)' können Sie auch 'tableView (_: titleForHeaderInSection)' überschreiben und 'nil' zurückgeben, wenn Sie die Kopfzeile ausblenden möchten. Dann wird die Abschnittshöhe automatisch auf 0 eingestellt, um keinen Text anzuzeigen. – maganap
Das Ausblenden der Zeilen und das Festlegen von Zeilen als Höhe 0 verursachte Probleme mit meinen Einschränkungen. Diese Antwort behebt das, nette Lösung! –