我有一个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.
}
}
}
}
-
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))
-
使用垂直滚动方向的UIPageViewController,但页面需要使用UIViewController。