【发布时间】:2018-03-08 16:16:00
【问题描述】:
我有一个带有包含聊天列表的 tableview 的视图控制器,一个嵌入在导航项中的搜索控制器(iOS 11 功能)
let searchController = UISearchController(searchResultsController: nil)
searchController.dimsBackgroundDuringPresentation = false
navigationItem.searchController = searchController
definesPresentationContext = true
当用户在表格视图中点击聊天时,应用会推送一个新的视图控制器,其中包含另一个表格视图,其中包含该聊天的消息。这就像它应该的那样工作:
问题是当用户激活搜索控制器,找到一些聊天并点击它时,包含聊天消息的表视图的推送视图控制器会执行一些非常奇怪的不应该发生的表视图动画:
我在实际导航之前加载数据并将其绑定到viewDidLoad 中的表格视图,仅使用表格视图上的reload()。有问题的表格视图使用自动布局和自定义单元格。
问题与UITableView has unwanted animation when reloadData is called 非常相似,但对我而言,它仅在 iOS 11 搜索控制器处于活动状态时才会发生。
编辑:如果我删除tableView.rowHeight = UITableViewAutomaticDimension 并使用func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 使用固定高度,问题仍然存在
【问题讨论】:
-
我不确定,但如果您在 performWithoutAnimation 块中重新加载 tableview 会有所帮助。 UIView.performWithoutAnimation { self.tableView.reloadData() }
-
我试过了,没有帮助。在 viewDidLoad 中调用了 reloadData() 所以我认为 tableview 是在显示 VC 之前加载的,所以动画与 reload 无关。
-
这看起来像您的视图控制器在推送动画期间执行布局传递。我建议确保在呈现视图控制器之前,您的视图及其所有子视图都处于最终状态。
-
您是在 Interface builder 中还是通过代码进行自动布局?您可以发布您的自动布局代码/逻辑的摘录吗?
标签: ios swift uitableview autolayout ios11