滚动到表视图标题顶部
Posted
技术标签:
【中文标题】滚动到表视图标题顶部【英文标题】:Scroll to Table View Header top 【发布时间】:2016-10-23 15:04:28 【问题描述】:我有一个 UITableView
标题,它占据了整个屏幕。
每当应用程序进入后台,然后返回前台/活动时,我希望将屏幕设置回标题顶部。
我只看到与滚动到表格顶部有关的答案,使用类似 answers 的内容,使用类似 self.tableView.scrollToRow(at: top, at: .top, animated: true)
的内容,但这不起作用,因为它只会滚动回第 0 行UITableView
的 0 不是 UITableView
的标题的顶部。
有什么想法吗?
谢谢!
编辑:试过了
override func viewWillAppear(_ animated: Bool)
self.tableView.setContentOffset( CGPoint(x: 0, y: 0) , animated: true)
这里有一些值得注意的表格设置代码:
// Set up Frames
let headerFrame: CGRect = UIScreen.main.bounds
// Background Table
self.tableView.isPagingEnabled = true
// Set up Table Header
let header = UIView(frame: headerFrame)
self.tableView.tableHeaderView = header
【问题讨论】:
你能贴出你的故事板截图吗 @Joe 故事板相当空白,因为我在代码中完成了大部分工作,我可以添加任何特定代码来提供帮助吗? 您能否更新您的代码和问题的屏幕截图。这对每个人都有帮助...... 您是否为您的标题设置了框架...我需要查看您的标题代码... 试试这个 tableView.tableHeaderView?.frame = CGRect.zero 并确保你已经定义了标题大小。 【参考方案1】:TableView 是一个滚动视图子类,所以我想这应该可以工作:
self.tableView.setContentOffset( CGPoint(x: 0, y: 0) , animated: true)
当应用程序进入前台时不会调用 ViewWillAppear。注册你的 VC UIApplicationWillEnterForegroundNotification
【讨论】:
我已经确认这行得通。只需将此添加到您的viewWillAppear
出于某种原因,我尝试了它,但它对我不起作用。我在上面发布了我的代码,这样你就可以看到我做的事情是否与推荐的不同。但为了测试它,我运行了应用程序,向下滚动到 tableview 的第二部分,将应用程序推送到后台,然后点击应用程序图标将应用程序带回前台,但它停留在第二部分而不是滚动到顶部/标题。
@SRMR 视图是否会出现方法被调用?
@IlyaLapan 不,我在上面放了一个断点,它只在应用程序最初加载时被调用,而不是在从后台返回时调用
这是因为当您的应用进入前台时,不会调用视图。【参考方案2】:
你可以滚动到Section Header,试试下面的代码:
DispatchQueue.main.async
let indexPath = IndexPath(row: NSNotFound, section: yourSectionIndex)
self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
对于行添加:NSNotFound
根据您的要求更改“scrollToRow”中的.top/.bottom。
【讨论】:
以上是关于滚动到表视图标题顶部的主要内容,如果未能解决你的问题,请参考以下文章
拖动到视图顶部时,UILongPressGestureRecognizer 在 tableview 中崩溃 - SWIFT