我有一个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.
}
}
}
}
答案 0 :(得分:2)
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。