Ich habe kürzlich Code auf das neue iOS 11 Beta 5 SDK migriert.
Ich bekomme jetzt ein sehr verwirrendes Verhalten von UITableView. Die Tabellenansicht selbst ist nicht so schick. Ich habe benutzerdefinierte Zellen, aber zum größten Teil ist es nur für ihre Höhe.
Wenn ich meinen Ansichts-Controller mit Tabellenansicht drücke, erhalte ich eine zusätzliche Animation, in der Zellen entlang der Push / Pop-Navigationsanimation "nach oben scrollen" (oder möglicherweise der gesamte Rahmen der Tabellenansicht geändert wird) und nach unten. Bitte siehe gif:
Ich erstelle manuell tableview
in loadView
Methode und richte Einschränkungen für das automatische Layout so ein, dass sie der führenden, nachfolgenden, oberen und unteren Seite der Übersicht der Tabellenansicht entsprechen. Die Übersicht ist die Stammansicht des View Controllers.
Der Push-Code des View Controllers ist Standard: self.navigationController?.pushViewController(notifVC, animated: true)
Der gleiche Code bietet unter iOS 10 ein normales Verhalten.
Könnten Sie mich bitte darauf hinweisen, was falsch ist?
EDIT: Ich habe einen sehr einfachen Tableview-Controller erstellt und kann dort das gleiche Verhalten reproduzieren. Code:
class VerySimpleTableViewController : UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = String(indexPath.row)
cell.accessoryType = .disclosureIndicator
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let vc = VerySimpleTableViewController.init(style: .grouped)
self.navigationController?.pushViewController(vc, animated: true)
}
}
EDIT 2: Ich konnte das Problem auf meine Anpassung von UINavigationBar eingrenzen. Ich habe eine Anpassung wie diese:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
Dabei createFilledImage
wird ein quadratisches Bild mit der angegebenen Größe und Farbe erstellt.
Wenn ich diese Zeile auskommentiere, bekomme ich wieder normales Verhalten.
Ich würde mich über Gedanken zu diesem Thema freuen.
navigationBar.isTranslucent
habe false
, sonst funktioniert es einwandfrei.