滚动到表视图标题顶部

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。

【讨论】:

以上是关于滚动到表视图标题顶部的主要内容,如果未能解决你的问题,请参考以下文章

Swift,将更多数据加载到表视图中会导致滚动滞后

从表视图导航到表视图再到表视图 (iOS)

拖动到视图顶部时,UILongPressGestureRecognizer 在 tableview 中崩溃 - SWIFT

主视图从滚动视图中占据顶部空间?

如何知道滚动视图的对象在 iOS 的顶部?

从视图控制器返回到表视图控制器时,表视图单元“跳跃”