问题描述
写了一个scrollview,里面充满了视图且已经超出显示内容,但是就是不滚动。
问题解决点:
- 1、设置属性 scrollEnabled = YES
- 2、设置属性 alwaysBounceVertical = YES 如果是需要横向滚动 设置 alwaysBounceHorizontal 属性为YES;
- 3、如果还没有滚动,请设置 属性 contentSize = CGSizeMake(0,你需要的纵向滚动范围);或者需要横向滚动的请 设置 属性 contentSize = CGSizeMake(你需要的横向滚动范围,0)
- 4、masonry布局,可以添加一个edges属性试一下,代码如下
// 这里centerScrollView 就是滚动视图,添加到的父视图是个view,即,self 对应一个view
[self.centerScrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self);
make.top.left.bottom.right.equalTo(0);
}];
- 5、尝试用frame进行布局试一下。如果frame 布局可以,再去仔细看下其他布局代码是不是哪里约束有问题。
-
6、尝试将scrollview里的内容添加到一个view上面,并给view设置size大小,然后将view 添加到scrollview上试一下(这里尝试的原因是怀疑自己添加的内容并没有完全充满scrollview,如果充满且超过了就可以滚动了,即自动打开alwaysBounceVertical属性)。
7、设置的masonry属性是否有冲突。比如下图代码。设置了view 的宽高,又设置了居左,居右equalTo(0),导致不能滚动。去掉居左就可以重新滚动了。
其他点拓展
UITableView默认情况下alwaysBounceVertical是YES,alwaysBounceHorizontal是NO;
UIScrollView和UICollectionView默认情况下alwaysBounceVertical和alwaysBounceHorizontal都是NO;只有当内容视图的尺寸超过了自己的bounds的尺寸的时候,相应方向上反弹属性才会自动设置为YES;
因此,在编程中,实现滚动视图的下拉和上拉刷新的时候,就要相应的打开alwaysBounceVertical属性,才能实现下拉和上拉功能;例如UICollectionView页面只有一条数据的时候,内容视图没用占据到UICollectionView的整个bounds,当前就无法滚动,这个时候就要设置alwaysBounceVertical为YES,才能在垂直方向实现反弹进而实现上下拉刷新功能。
感谢李书涛、刘涛两位大佬提供的解决思路与方案。