UIScrollView分页滑动视图
分页滑动的内容展示,ScrollView确实是个老朋友了。
在 iOS 开发里,多时候你都需要一个可以左右滑动、还能按页停下来的视图。比如做个图片轮播、APP 页,或者像电子书那样一页一页翻,这时候用UIScrollView加分页功能,真挺顺手的。
contentSize的设置是重点,要保证它是屏幕宽度的倍数,比如 375pt 宽度的屏幕,就得scrollView.contentSize.width = 375 * 页数
。别忘了把pagingEnabled
打开,scrollView.pagingEnabled = true
,系统会帮你自动对齐整页,体验自然。
想监听页数变化,用UIScrollViewDelegate的scrollViewDidEndDecelerating
就行,滑完一页就能知道现在是第几页。如果还加了UIPageControl或自定义标签栏,那你只要根据点击的标签更新contentOffset
,页面就切过来了。
布局上每页一个子视图,宽度和屏幕一样,像scrollView.addSubview(view)
那样循环加进去。建议把每页的视图中心对齐,保证翻页时内容在正中间,看起来也舒服。
哦对了,如果你标签栏也带滑动手势,注意手势冲突。用gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
去控制它俩能不能同时响应。搞定这个,滑动体验会更顺畅。
还有性能问题,一页一个视图的话,内存一下就顶满了。你可以搞个懒加载,只加载当前页和相邻页,其它的滑过去再加载,效率提升不少。
给你段 Swift 示例,跑起来看看效果:
let scrollView = UIScrollView()
scrollView.frame = view.bounds
scrollView.contentSize = CGSize(width: view.bounds.width * totalPages, height: view.bounds.height)
scrollView.pagingEnabled = true
scrollView.delegate = self
如果你页面切换逻辑比较复杂,或者想集成更多交互,记得把UICollectionView也考虑进去,参考下这篇文章也蛮不错。
评论区