我的iPad应用程序中的按钮上连接了一个弹出窗口。弹出窗口显示一个NavigationController,其中嵌入了TableViewController(所有设置都使用情节提要)。表格视图控制器正在显示一个书签列表,其想法是用户可以选择一个,弹出窗口消失,然后应用书签。这一切都很好,但是,当用户打开弹出窗口时,表视图始终滚动到最顶部(我假设这是因为视图控制器每次都是从头开始创建的;是否可以更改此方法?) 。我希望列表保持滚动到弹出窗口关闭时的位置。
我在这里阅读了许多文章,介绍了如何解决此问题,这些内容基本上都包括在viewWillDisappear中保存内容偏移量(或第一个/最后一个可见项),然后滚动表格在viewWillAppear中查看。当我这样做时,表格视图会滚动,但不会滚动到正确的位置。到目前为止,我还无法确定视图最终滚动的量的押韵或原因。
我尝试强制视图先布局,以便在滚动之前正确设置高度,但这似乎没有效果。
如果我将滚动代码放入viewDidAppear中,那么它将滚动到正确的位置,但用户可以看到视图跳转。对我来说,这表示保存的内容偏移量是正确的,问题在于尝试在视图加载完成之前设置内容偏移量。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//This appears to have no effect.
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
tableView.setContentOffset(BookmarksTableViewController.scrollPos,animated: false)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
//Uncommenting this will cause the view to scroll to the correct position,but after the table view is visible.
//tableView.setContentOffset(BookmarksTableViewController.scrollPos,animated: false)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
BookmarksTableViewController.scrollPos = tableView.contentOffset
}