Di recente ho migrato del codice al nuovo SDK iOS 11 beta 5.
Ora ottengo un comportamento molto confuso da UITableView. La vista del tavolo in sé non è così lussuosa. Ho celle personalizzate ma nella maggior parte dei casi è solo per la loro altezza.
Quando spingo il mio controller di visualizzazione con tableview ottengo un'animazione aggiuntiva in cui le celle "scorrono verso l'alto" (o forse l'intero frame tableview viene modificato) e verso il basso lungo l'animazione di navigazione push / pop. Si prega di vedere gif:
Creo manualmente tableview
nel loadView
metodo e imposto i vincoli di layout automatico in modo che siano uguali a leading, trailing, top, bottom della superview di tableview. La superview è la vista principale del controller di visualizzazione.
Il codice di push del controller di visualizzazione è molto standard: self.navigationController?.pushViewController(notifVC, animated: true)
Lo stesso codice fornisce un comportamento normale su iOS 10.
Potresti indicarmi per favore cosa c'è che non va?
EDIT: Ho creato un controller tableview molto semplice e posso riprodurre lo stesso comportamento lì. Codice:
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: sono stato in grado di limitare il problema alla mia personalizzazione di UINavigationBar. Ho una personalizzazione come questa:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
dove createFilledImage
crea un'immagine quadrata con dimensioni e colore dati.
Se commento questa riga, riprendo un comportamento normale.
Apprezzerei qualsiasi pensiero su questo argomento.
navigationBar.isTranslucent
su false
, altrimenti funziona bene.