Нещодавно я перемістив якийсь код на новий iOS 11 beta 5 SDK.
Зараз я отримую дуже заплутану поведінку від UITableView. Сам настільний вигляд не такий фантазійний. У мене є власні клітини, але здебільшого це лише для їхнього зросту.
Коли я натискаю на контролер перегляду з табличним переглядом, я отримую додаткову анімацію, де клітини "прокручуються вгору" (або, можливо, весь кадр перегляду таблиці) змінюються і вниз вздовж анімації push / pop навігації. Перегляньте gif:
Я вручну створюю tableview
в loadView
методі та налаштуваннях автоматичні обмеження макета, щоб вони дорівнювали провідному, кінцевому, верхньому, нижньому огляду табличного перегляду. Нагляд - це кореневий вигляд контролера перегляду.
Перегляд натискання коду контролера дуже стандартний: 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)
}
}
EDIT 2: мені вдалося звузити проблему до моєї настройки UINavigationBar. У мене таке налаштування:
rootNavController.navigationBar.setBackgroundImage(createFilledImage(withColor: .white, size: 1), for: .default)
де createFilledImage
створюється квадратне зображення із заданим розміром і кольором.
Якщо я коментую цей рядок, я повертаюся до нормальної поведінки.
Буду вдячний за будь-які думки з цього приводу.
navigationBar.isTranslucent
в false
іншому випадку він працює відмінно.