使用UIScrollView进行垂直分页



我有一个UIScrollView,里面有一个UI视图和一个UITableView。我想进行分页,所以在第一次向下滚动时,视图向下滑动并将TableView定位到顶部(类似于垂直分页)。所以,当用户来到页面时,他会看到UIView,向下滑动后,它会滚动,直到TableView位于页面顶部,然后是经典的TableView。然后,如果用户向上滑动超过TableView的顶部,则垂直分页返回UIView。

UIScrollView
   |------------------|
   | |--------------| |
   | |    UIView    | |
   | |              | |
   | |              | |
   | |              | |
   | |              | |
   | |              | |
   | |--------------| |
   | |   TableView  | |
   | |              | |
   | |     ...      | |
   | |--------------| |
   |------------------|

之前,我使用scrollViewWillEndDragging来获得向上滑动&向下的手势。但我对如何实现垂直分页感到困惑。

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
   if targetContentOffset.memory.y < scrollView.contentOffset.y {
      // Going Up
       if Page != 0 {  // should also check if TableView is at top.
           // Scroll Up To UIView
       }
    } else {
       if 0 < scrollOffset {
            if Page == 0 { 
                // Scroll Down to the top of TableView    
                // I can also check if view is at the top maybe 200 pixels, but      
                // I think this would also work.
            }
       }
    }       
}
  1. UIScrollView具有pagingEnabled属性,只需将其设置为true,但请确保正确设置了内容大小。

    let scrollView = UIScrollView(frame: view.bounds)
    scrollView.pagingEnabled = true
    view.addSubview(scrollView)
    let pageSize = view.bounds.size
    let upperView = UIView()
    upperView.backgroundColor = UIColor.redColor()
    let lowerView = UITableView()
    lowerView.backgroundColor = UIColor.blueColor()
    let pagesViews = [upperView , lowerView]
    let numberOfPages = pagesViews.count
    for (pageIndex,page) in pagesViews.enumerate(){
        page.frame = CGRect(origin: CGPoint(x:0 , y:CGFloat(pageIndex) * pageSize.height), size: pageSize)
        scrollView.addSubview(page)
    }
    scrollView.contentSize = CGSize(width: pageSize.width, height: pageSize.height * CGFloat(numberOfPages))
    
  2. 使用垂直滚动方向的UIPageViewController,但页面需要使用UIViewController。