swift – 如何使ScrollView中的TableView滚动自然

前端之家收集整理的这篇文章主要介绍了swift – 如何使ScrollView中的TableView滚动自然前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要做这个有奇怪配置的应用程序。

如下图所示,主视图是UIScrollView。那么里面应该有一个UIPageView,每一页的PageView都应该有一个UITableView。

到目前为止我已经做了这一切。但是我的问题是我希望滚动自然地行动。

接下来是我自然的意思。当我在其中一个UITableView上滚动时,它会滚动tableview(而不是scrollview)。但是我希望它滚动ScrollView,除非scrollview不能滚动,因为它到达其顶部或底部(在这种情况下,我希望滚动表视图)。

例如,假设我的滚动视图当前滚动到顶部。然后我把手指放在桌面上(当前页面显示)并开始向下滚动。我这种情况下,我想要滚动浏览(没有tableview)。如果我继续滚动我的滚动视图,它到达底部,如果我从显示屏上移除我的手指,并将其放回tebleview并再次向下滚动,我希望我的表视图向下滚动,因为scrollview到底部,它不是能够保持滚动。

你们有没有关于如何实现这个滚动的想法?

我真的迷失了这个。任何帮助将非常感谢它:(

谢谢!

同时处理滚动视图和表视图的解决方案围绕着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:delegate方法可以处理到达滚动视图的底部并到达表视图的顶部。这是那个方法

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来展示结果:

猜你在找的Swift相关文章