最佳答案
我最近将一些代码迁移到了新的 iOS11Beta5SDK。
现在,我从 UITableView 得到了一个非常令人困惑的行为。餐桌景观本身并没有那么华丽。我有自定义细胞,但在大多数情况下,这只是为了他们的高度。
当我使用 tableview 推动我的视图控制器时,我得到了一个额外的动画,其中单元格“向上滚动”(或者可能整个 tableview 框架都改变了)并沿着推/弹出导航动画向下滚动。请参阅 gif:
我在 loadView
方法中手动创建 tableview
,并设置自动布局约束等于 tableview 的超视图的前导、尾随、顶部和底部。Superview 是视图控制器的根视图。
视图控制器推送代码是非常标准的: self.navigationController?.pushViewController(notifVC, animated: true)
同样的代码在 iOS10上提供了正常的行为。
你能告诉我哪里出了问题吗?
编辑: 我做了一个非常简单的桌面视图控制器,我可以在那里重现同样的行为。代码:
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
创建具有给定大小和颜色的正方形图像。
如果我注释掉这一行,我会得到正常的行为。
如果你对这件事有任何想法,我将不胜感激。