使用UIScrollView进行垂直分页

时间:2016-04-10 05:20:34

标签: ios swift uitableview uiviewcontroller uiscrollview

我有一个UIScrollView,里面有一个UIView和一个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 个答案:

答案 0 :(得分:2)

  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。