【发布时间】:2018-01-16 08:22:16
【问题描述】:
我最近将一些代码迁移到新的 iOS 11 beta 5 SDK。
我现在从 UITableView 中得到一个非常令人困惑的行为。 tableview 本身并没有那么花哨。我有自定义单元格,但大部分只是为了它们的高度。
当我用 tableview 推动我的视图控制器时,我会得到一个额外的动画,其中单元格“向上滚动”(或者可能整个 tableview 框架被更改)并沿着推送/弹出导航动画向下滚动。请看gif:
我在loadView 方法中手动创建tableview 并将自动布局约束设置为等于tableview 超级视图的前导、尾随、顶部、底部。 superview 是视图控制器的根视图。
视图控制器推送代码非常标准: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 创建具有给定大小和颜色的方形图像。
如果我注释掉这一行,我会恢复正常行为。
如果您对此事有任何想法,我将不胜感激。
【问题讨论】:
-
导航栏的自定义可能不是问题。我遇到了同样的问题(接受的答案解决了这个问题),没有任何定制。我认为这可能是 iOS 在手动创建表视图作为子视图而不是使用 UITableViewController 时处理表视图的方式的问题。
-
只有当我将
navigationBar.isTranslucent设置为false时才会看到这种行为,否则它可以正常工作。 -
这似乎是 iOS11 GM 中的一个错误,请复制该错误报告,以便该问题得到 Apple 的关注:openradar.appspot.com/34465226
-
这个问题似乎在 iOS 11.2 beta 中得到修复。我不会将 contentInsetAdjustmentBehavior 设置为 never,因为它通过不在屏幕底部提供填充来破坏 iPhone X 滚动视图。内容视图的底部位于 iPhone X 的主页“按钮”下方。
标签: ios uitableview animation uinavigationcontroller