【问题标题】:Vertical Paging Using UIScrollView使用 UIScrollView 进行垂直分页
【发布时间】:2016-07-31 06:47:30
【问题描述】:

我有一个 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.

            }
       }
    }       
}

【问题讨论】:

    标签: ios swift uitableview uiviewcontroller uiscrollview


    【解决方案1】:
    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。

    【讨论】:

    • 你能扩展你的答案吗?我很困惑。如果您能在示例项目中进行演示,并且要求不高,我将不胜感激。
    • 查看答案,我添加了一个滚动视图示例。
    • 感谢您的示例,现在更有意义了。但是,我有一个问题。如果我使用 ScrollView 方法,我想不出如何将它与 Storyboard 一起使用。我的想法是,i)创建一个 ViewController,ii)添加带有尾随和前导顶部、底部、左侧、右侧的 ScrollView。 iii) 启用寻呼。在这一点上,我对如何设置/调整 UIView() 和 UITableView 以及它们在 Storyboard 上的约束感到困惑。我认为不可能将 ScrollView 方法与 Storyboard 一起使用,对吗?
    • 编辑: 使用this answer 中的屏幕截图,我发现实际上可以创建 UIView 和 UITableView,如果我在 ViewController 下而不是在 View 中拖放(检查屏幕截图在答案中).. @Oleg 非常感谢伙计!
    • 编辑 2: 我写错了,无法编辑之前的评论。 *不在 ViewController 下,在 Scene 下,而是作为 ViewController 的兄弟
    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    相关资源
    最近更新 更多