Недавно я перенес некоторый код в новый iOS 11 beta 5 SDK.
Теперь я получаю очень запутанное поведение из UITableView. Сама таблица не такова. У меня есть пользовательские ячейки, но в большинстве случаев это просто для их высоты.
Когда я нажимаю свой контроллер представления с помощью tableview, я получаю дополнительную анимацию, где ячейки "прокручиваются вверх" (или, возможно, весь кадр таблицы), и вниз по анимации push/pop навигации. Смотрите gif:
Я вручную создаю метод tableview
в loadView
и устанавливаю ограничения автоматического макета, чтобы быть равным ведущему, обратному, верхнему, нижнему уровню надзора viewview. Супервизор - это корневой вид контроллера вида.
Просмотр кода нажатия контроллера очень стандартен: self.navigationController?.pushViewController(notifVC, animated: true)
Тот же код обеспечивает нормальное поведение на iOS 10.
Не могли бы вы указать мне направление того, что не так?
EDIT: я создал очень простой контроллер таблицы, и я могу воспроизвести там такое же поведение. Код:
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
создает квадратное изображение с заданным размером и цветом.
Если я прокомментирую эту строку, я вернусь к нормальному поведению.
Буду признателен за любые мысли по этому вопросу.