项目经常要用到类似于安卓的PagerAdapter的效果,就是采用UIScrollView 来实现左右滑动的。
之前学习的Interface Builder的做法比较麻烦,且复用性不高,每次需要的话要重新拉约束(关键这个一不小心就会出错),下面介绍一下从Interface Builder和用代码封装的两种做法
Interface Builder
主要的想法是,利用scrollview的滑动,在其上加入对应的containView,scrollview的contentSize的大小就是containView的大小,这样子说有点抽象,还是一步一步来介绍。
1、建立viewController ,拉入ScrollView、Segment的控件(例子为3个page)
![](https://img.haomeiwen.com/i2605144/40f5c6a384b87f6b.png)
2、在scrollView中加入containView 控件(3个),主要的布局思想是containView1、containView2、containView3(从左到右,一下简称view1,view2,view3),3个的top space 约束和bottom space 约束都与scroll view 为0
![](https://img.haomeiwen.com/i2605144/0bcb0ec2816dbd9b.png)
同时三containview的height等于scrollView的高度,view1的leading space与scrollView 为0,trailing space 与view2 为0,以此类推,初步的一个3个page的scrollView规格成了。
3、为了确定scrollView的contentSize的宽度(显示左右滑动的长度),需要子页面来提供宽度撑起页面,这时containview的width设置为View(scrollView的Super View)的宽度
![](https://img.haomeiwen.com/i2605144/67215582efcec0b7.png)
这样,一个宽为3个page 的scrollView就做好了
![](https://img.haomeiwen.com/i2605144/521f05d6425ee79b.png)
4、在对应的.m文件实现Segment 的点击事件和scrollView delegate的滑动计算
![](https://img.haomeiwen.com/i2605144/8a0bf0dfa721d294.png)
效果图
![](https://img.haomeiwen.com/i2605144/34af4f1a17ea4ebe.gif)
代码封装
这个是在前辈的基础上完成的,主要的思路其实与Interface Builder的思路是一样的,但是用代码封装完成的话,这样更有利之后的使用,适应的范围更广,使用更简便。
类
![](https://img.haomeiwen.com/i2605144/a644739aacd84925.png)
具体的情况,头文件
![](https://img.haomeiwen.com/i2605144/97be532cdaf19e8c.png)
主要的代码块:
![](https://img.haomeiwen.com/i2605144/ae27034605c5eb93.png)
使用:
![](https://img.haomeiwen.com/i2605144/d91a0c1d83381ada.png)
只要将对应头文件的参数设置好,将pageController的view和controller加入到要显示的VC中,就可以使用了。
效果图:
![](https://img.haomeiwen.com/i2605144/ed31a9a3d161ec46.gif)
至于.m文件中具体实现的步骤就不一一阐述了,后续会将Demo上传的。
demo:github.com/hdongdong/DDPageController/tree/master
后记:对了,在用pageController的时候在所显示的页面中是navigation controller的页面时,就是nav bar存在时,此时苹果的会自动将view的显示内容往下移64pt, 可能会在造成header view的显示出现问题,可以这样做
![](https://img.haomeiwen.com/i2605144/0d71a56e9c2cde94.png)
具体的原因和相应解决方法请参考关于NavigationBar存在时,UIScrollView内容发生偏移的问题
网友评论