Недавно я перенес некоторый код в новый 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
создает квадратное изображение заданного размера и цвета.
Если я закомментирую эту строку, я вернусь к нормальному поведению.
Буду признателен за любые мысли по этому поводу.
tableView.contentInsetAdjustmentBehavior
приведет к поломке вставок. 29.09.2017contentInsetAdjustmentBehavior
на.never
- не лучший обходной путь, потому что он, вероятно, будет иметь другие нежелательные побочные эффекты. Если вы все же используете обходной путь, обязательно удалите его для версий iOS ›= 11.2. 01.11.2017