J'ai récemment migré du code vers le nouveau SDK iOS 11 beta 5.
J'obtiens maintenant un comportement très déroutant de UITableView. Le tableau lui-même n'est pas si sophistiqué. J'ai des cellules personnalisées, mais dans la plupart des cas, c'est juste pour leur hauteur.
Quand je pousse mon contrôleur de vue avec tableview, j'obtiens une animation supplémentaire où les cellules "défilent" (ou peut-être tout le cadre de tableview est changé) et vers le bas le long de l'animation de navigation push / pop. S'il vous plaît voir gif:
Je crée manuellement tableview
dans la loadView
méthode et configure les contraintes de mise en page automatique pour qu'elles soient égales au début, à la fin, en haut, en bas de la vue de la table. Le superview est la vue racine du contrôleur de vue.
Le code de poussée du contrôleur de vue est très standard: self.navigationController?.pushViewController(notifVC, animated: true)
Le même code fournit un comportement normal sur iOS 10.
Pourriez-vous s'il vous plaît m'indiquer ce qui ne va pas?
EDIT: J'ai fait un contrôleur tableview très simple et je peux reproduire le même comportement là-bas. 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: J'ai pu réduire le problème à ma personnalisation de UINavigationBar. J'ai une personnalisation comme celle-ci:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
où createFilledImage
crée une image carrée avec une taille et une couleur données.
Si je commente cette ligne, je retrouve un comportement normal.
J'apprécierais toute réflexion sur cette question.
navigationBar.isTranslucent
sur false
, sinon cela fonctionne bien.