【问题标题】: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 并确保你已经定义了标题大小。

标签: ios swift uitableview


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多