Ich habe eine benutzerdefinierte Header-Ansicht für eine UITableView
erstellt. Der Typ der Kopfzeile ist UITableViewCell
. Ich setzte es im Storyboard und hinzugefügt, um es zu der Ansicht Hierarchie wie sein in der Abbildung untenBenutzerdefinierte HeaderView nur im letzten Abschnitt
Hier ist mein Code für UITableViewController
import UIKit
class SecondCustomTableViewController: UITableViewController {
@IBOutlet weak var customHeaderView: UITableViewCell!
let array = ["Row 1", "Row 2", "Row 3"]
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(SecondCustomTableViewController.self, forHeaderFooterViewReuseIdentifier: "Header")
self.tableView.dequeueReusableHeaderFooterView(withIdentifier: "Header")
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = "\(array[indexPath.row])"
return cell
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
print("\(customHeaderView) -> Section: \(section)")
return customHeaderView
}
}
Wenn ich es im Simulator führen Sie es sieht aus wie diese
Meine Frage ist: Warum mein benutzerdefinierter Kopf Welche Ansicht wird nur für den letzten Abschnitt angezeigt?
Die print-Anweisung in der viewForHeaderInSection
Methode sieht wie folgt aus:
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; layer = <CALayer: 0x600000038d00>>) -> Section: 0
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 0; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 1
Optional(<UITableViewCell: 0x7ff287802200; frame = (0 176; 375 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x600000038d00>>) -> Section: 2
Ich wickelte auch die optionale es ein nicht optional, aber es ist das gleiche Verhalten zu machen. Wie die print-Anweisung zeigt, wird die Methode viewForHeaderInSection
dreimal aufgerufen, warum also die Überschrift nur für den letzten Abschnitt angezeigt wird?
Ich hoffe jemand kann mir dabei helfen. Jeder Hinweis wird sehr geschätzt.
Registrierst du es in deiner tableView und entfernst es in der Methode? – sdasdadas
Ja, ich habe es getan. Ich arbeitete mit der gleichen Technik in einem anderen Projekt und es funktionierte. – user1895268
Sie scheinen jedoch in Ihrem Beispiel nicht aus der Warteschlange herauszukommen. – sdasdadas