同时处理滚动视图和表视图的解决方案围绕UIScrollViewDelegate
。因此,让您的视图控制器遵守该协议:
class ViewController: UIViewController, UIScrollViewDelegate {
我将滚动视图和表格视图表示为出口:
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var tableView: UITableView!
我们还需要跟踪滚动视图内容的高度以及屏幕高度。稍后您会看到原因。
let screenHeight = UIScreen.mainScreen().bounds.height
let scrollViewContentHeight = 1200 as CGFloat
需要一些配置viewDidLoad:
:
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize = CGSizeMake(scrollViewContentWidth, scrollViewContentHeight)
scrollView.delegate = self
tableView.delegate = self
scrollView.bounces = false
tableView.bounces = false
tableView.scrollEnabled = false
}
为了使事情简单,我关闭了弹跳功能。关键设置是滚动视图和表格视图的委托,并且首先关闭表格视图滚动。
这些是必需的,以便scrollViewDidScroll:
委托方法可以处理到达滚动视图的底部和到达表格视图的顶部。这是该方法:
func scrollViewDidScroll(scrollView: UIScrollView) {
let yOffset = scrollView.contentOffset.y
if scrollView == self.scrollView {
if yOffset >= scrollViewContentHeight - screenHeight {
scrollView.scrollEnabled = false
tableView.scrollEnabled = true
}
}
if scrollView == self.tableView {
if yOffset <= 0 {
self.scrollView.scrollEnabled = true
self.tableView.scrollEnabled = false
}
}
}
委托方法正在执行的操作是检测滚动视图何时到达其底部。发生这种情况时,可以滚动表视图。它还可以检测到表格视图何时到达重新启用滚动视图的顶部。
我创建了一个GIF来演示结果: