Недавно я перенес код на новый SDK iOS 11 beta 5.
Теперь я получаю очень запутанное поведение от UITableView. Само по себе tableview не такое уж и красивое. У меня есть нестандартные ячейки, но по большей части это просто для их высоты.
Когда я нажимаю на свой контроллер представления с помощью tableview, я получаю дополнительную анимацию, в которой ячейки «прокручиваются вверх» (или, возможно, изменяется весь кадр tableview) и вниз вместе с анимацией навигации push / pop. См. Gif:
Я вручную создать tableview
в loadView
методе и автоматическая настройка макета ограничений равного ведущий завершающий, верхний, нижнюю надтаблицы Tableview в. Супервизор является корневым представлением контроллера представления.
Код отправки контроллера представления очень стандартный: self.navigationController?.pushViewController(notifVC, animated: true)
Тот же код обеспечивает нормальное поведение на iOS 10.
Не могли бы вы указать мне, что не так?
РЕДАКТИРОВАТЬ: Я сделал очень простой контроллер tableview, и я могу воспроизвести там то же поведение. Код:
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)
}
}
РЕДАКТИРОВАТЬ 2: мне удалось сузить проблему до моей настройки UINavigationBar. У меня есть такая настройка:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
где createFilledImage
создает квадратное изображение заданного размера и цвета.
Если я закомментирую эту строку, я вернусь к нормальному поведению.
Буду признателен за любые мысли по этому поводу.
navigationBar.isTranslucent
в false
противном случае он работает отлично.