我需要做这个有奇怪配置的应用程序。
如下图所示,主视图是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来展示结果: