我们在xib里面创建scrollview是不能直接设置contentSize的,这就导致用xib创建出得Scrollview不能滑动。正确的做法是:
1.创建ScrollView
2.创建ScrollView的子View(子view如有多个,需先创建一个容器view,然后将所有子view放入容器View,在将容器view放入ScrollView,这个容器view就相当于下面的imageView);下面为示例图
这里以imgeview为例;并进行约束
注意这里的高度Height的约束
因为是垂直滑动,所以需要点选imageview的
Horizontal
Center
in
Container ,反之水平滑动需点选
Vertical
Center
in
Container
(对应的需创建宽度Width约束)
3.其实到了这里已经可以了,但是很多时候我们创建的Scrollview的contentSize并不是固定的,这就需要对Scrollview的子View的Frame进行动态的改变,做法如下:
我们可以看到刚刚对Scrollview的子View——imageView的高度Height的约束,将其拖入对应类的.h文件内,取名imageHeight;
然后就可以在
-(
void
)viewDidAppear:(
BOOL
)animated 对其经行动态的修改了
4.在Scrollview内需要添加多个子View(既需要容器View)还有稍微的不同,因为容器view内的多个View之间多是约束关系,所以我们不能很好的得到我们需要的高度值来动态修改
容器view的高度(宽度)约束。解决方法也很简单,就是把容器view内带有约束的最后(最下/最右)一个子view(lastView)拖入.h,然后计算lastView.frame.origin.y(x)+lastView.frame.size.height(width)即为我们需要的新的约束高度(宽度);
5.有时候我们需要去网络获取数据,然后很据网络返回的数据来加载子view,这样就会出现一个致命的问题,我在项目中的数据接口是用Block返回的,当block返回数据时,viewController已经加载出来了,所以尺寸一直有问题。考虑了一下有两种实现方法1.使用同步加载获取数据。2.在Block内更新布局约束。我的解决方法是:在
-(
void
)updateViewConstraints里修改NSLayoutConstraint 在数据返回Block里面调用[selfupdateViewConstraints]; 不知道这样会不会有什么问题。希望大牛指教