UIScrollView使用AutoLayout布局,和其他控件,比如UIButton的布局略有差别。使用其他控件的布局方式,会发现Xcode会报错。
原因是:UIScrollView的contentSize需要根据内容控件的大小来确定。而常规布局方式,设定内容控件的约束,一般上、下、左、右拉线,是由父视图的大小来决定内容控件的大小的。这就产生了矛盾,双方相互依赖,不能确定大小。
解决方案:
1.
UIScrollView 上、下、左、右 设置约束到它的父视图。
2.
往UIScrollView中拖入一个子视图,比如叫做contentView。上、下、左、右 设置约束到UIScrollView。关键点:再设置contentView的宽度和高度约束。写死值,比如320,480。
3.
假如你想横向滑动,将contentView的宽度约束,按住control拖线到ViewController,生成一个宽度约束的成员变量。例如:
@property
(
weak
,
nonatomic
)
IBOutlet
NSLayoutConstraint
*widthCon;
4.
更改widthCon的值,
self
.
widthCon
.
constant
=
CGRectGetMaxX
(imageView.
frame
); 假如imageView的宽度超出屏幕,你会发现scrollView也变得可以横向滑动了。
5.其他子控件的布局,因为放在了contentView上,子控件的父视图是contentView,而contentView由于我们把宽高固定了,所以可以按常规布局方式来设置约束条件。
6.无需在代码中设置scrollView的contentSize属性,因为scrollView的contentSize取决于contentView的大小,所以只需变更contentView的宽度约束或高度约束就可以了。
7.此方法只需考虑contentView和UIScrollView的特殊布局关系。因为其他控件都放在了contentView中,可以采用正常布局方式。实现起来还是比较简单方便的。