我需要在加载时隐藏导航栏后面的第一个单元格,并且只有当表格 View 向下滚动时才能看到。
最佳答案
您可以通过在 viewDidLoad
方法中设置其 contentInset
来隐藏导航栏后面的第一个单元格,如下所示:
self.tableView.contentInset = UIEdgeInsets(top: -44, left: 0, bottom: 0, right: 0)
之后,您可以使用scrollViewDidScroll
来检测用户是否滚动tableView
,并且您可以在用户向下滚动时再次设置contentInset
,如下所示代码:
override func scrollViewDidScroll(scrollView: UIScrollView) {
if (self.lastContentOffset > scrollView.contentOffset.y) {
if lastContentOffset < -55{
if !tablevieSetTo0 {
self.tableView.contentInset = UIEdgeInsets(top: 65, left: 0, bottom: 0, right: 0)
tablevieSetTo0 = true
}
}
}
self.lastContentOffset = scrollView.contentOffset.y
}
下面是完整的代码:
import UIKit
class TableViewController: UITableViewController {
let data = ["1", "2", "3", "4", "5"]
private var lastContentOffset: CGFloat = 0
var tablevieSetTo0 = false
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.contentInset = UIEdgeInsets(top: -44, left: 0, bottom: 0, right: 0)
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = data[indexPath.row]
return cell
}
override func scrollViewDidScroll(scrollView: UIScrollView) {
if (self.lastContentOffset > scrollView.contentOffset.y) {
if lastContentOffset < -55{
if !tablevieSetTo0 {
self.tableView.contentInset = UIEdgeInsets(top: 65, left: 0, bottom: 0, right: 0)
tablevieSetTo0 = true
}
}
}
self.lastContentOffset = scrollView.contentOffset.y
}
}
项目sample了解更多信息。
关于ios - 隐藏导航栏后面的第一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36028107/