Migrei recentemente alguns códigos para o novo iOS 11 beta 5 SDK.
Agora recebo um comportamento muito confuso de UITableView. O tableview em si não é tão chique. Tenho células personalizadas, mas na maioria das vezes são apenas para a altura.
Quando empurro meu controlador de visualização com tableview, obtenho uma animação adicional em que as células "rolam para cima" (ou possivelmente todo o quadro tableview é alterado) e para baixo ao longo da animação de navegação push / pop. Por favor, veja gif:
Eu crio manualmente tableview
no loadView
método e configuro as restrições de layout automático para serem iguais à visão inicial, final, superior e inferior da supervisão do tableview. O superview é a visão raiz do controlador de visão.
Visualizar o código de envio do controlador é muito padrão: self.navigationController?.pushViewController(notifVC, animated: true)
O mesmo código fornece comportamento normal no iOS 10.
Você poderia me indicar o que está errado?
EDIT: Eu fiz um controlador tableview muito simples e posso reproduzir o mesmo comportamento lá. Código:
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: Consegui restringir o problema à minha personalização do UINavigationBar. Tenho uma personalização como esta:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
onde createFilledImage
cria uma imagem quadrada com determinado tamanho e cor.
Se eu comentar esta linha, recupero o comportamento normal.
Eu apreciaria qualquer opinião sobre este assunto.
navigationBar.isTranslucent
como false
, caso contrário, funciona bem.