UIScrollView+Masonry采坑记录

背景

之前一直使用UITableView和UICollectionView,绝大多数的页面都可以用这两个很好的完成。今天遇到一个页面却用两者都不合适,因此使用UIScrollView。

frame和contentSize

具体的UIScrollView的使用这里不细说,有需要的同学可以自行Google

UIScrollview最重要的两个属性:frame和contentsize。frame决定在窗口中显示的位置大小,而contentsize则是你真正的内容的大小。在tableview或是collectionview中内容总是在可见范围中,contentsize是等于frame的。而在scrollview中contentsize并不受frame的限制,可以大到超出frame,这也就是常见的大图缩放、查看局部的原本技术。

当我像往常一样用masonry自动布局:top+left+bottom+right。却发现我的imageview会超出页面,UILabel不会换行
原本以为是水平滑动的关系,因此设置contentSize = CGSizeMake(length, 0)以禁止水平滑动。
然而发现事情并没有那么简单,问题依旧在,没有丝毫变化。

问题原因

如果使用masonry,masonry会根据约束来重新设置contentSize,这会使得你之前设置的contentSize,这也就解释了无论怎么设置都没有变化的现象。
而通过设置四个方向的边距来布局,没有设置宽度的情况下,水平方向就会延伸以显示ImageView或是UILabel文字。

解决方法

使用Masonry,在初始化UIScrollview时设置contentSize是无效的,因为Masonry会重新设置。
在使用UIScrollviewView时,如果希望水平方向不滑动,则应在masonry中显示设置宽度。相同的要使垂直方向不滑动,则显示设置高度。

你可能感兴趣的:(UIScrollView+Masonry采坑记录)