最近遇到UICollectionView显示的所有单元格的高度总和不超过屏幕高度,结果遇到无法下拉刷新,监控不到滚动时间就是把滚动条设置上去也没有任何效果。使用UITableView显示数据下拉刷新正常。
后来找度娘和查看UICollectionView的接口文档。发现UICollectionView默认的alwaysBounceVertical属性是NO,当该属性为NO时,显示的单元格总高度和分区头尾高度的和小于表格的高度时,禁止UICollectionView上下滑动。
我设置_collectionView.alwaysBounceVertical = YES;后终于可以触发下拉刷新组件进行下拉刷新了。
@property(nonatomic) BOOL bounces; // default YES. if YES, bounces past edge of content and back again
@property(nonatomic) BOOL alwaysBounceVertical; // default NO. if YES and bounces is YES, even if content is smaller than bounds, allow drag vertically
@property(nonatomic) BOOL alwaysBounceHorizontal; // default NO. if YES and bounces is YES, even if content is smaller than bounds, allow drag horizontally
用来控制滚动视图是否反弹,bounces默认是YES,当它为NO的时候,其他两个属性值设置无效,滚动视图无法反弹;只有当bounces是YES的时候,其他两个属性设置才有效,alwaysBounceVertical设置垂直方向的反弹是否有效,alwaysBounceHorizontal设置水平方向的反弹是否有效;
UITableView默认情况下alwaysBounceVertical是YES,alwaysBounceHorizontal是NO;
UIScrollView和UICollectionView默认情况下alwaysBounceVertical和alwaysBounceHorizontal都是NO;只有当内容视图的尺寸超过了自己的bounds的尺寸的时候,相应方向上反弹属性才会自动设置为YES;
简言之,UITableView和UIScrollView、UICollectionView的alwaysBounceVertical默认属性相反。
因此,在编程中,实现滚动视图的下拉和上拉刷新的时候,就要相应的打开alwaysBounceVertical属性,才能实现下拉和上拉功能;例如UICollectionView页面只有一条数据的时候,内容视图没用占据到UICollectionView的整个bounds,当前就无法滚动,这个时候就要设置alwaysBounceVertical为YES,才能在垂直方向实现反弹进而实现上下拉刷新功能。
注意:你计算的单元格总高度计算如果计算的比实际表格小一些(小一个像素也可以),你设置alwaysBounceVertical属性为NO,也能下拉刷新。若你的数据不显示满屏,不想触发下拉刷,一定要设置的表格高度不能比单元格的总高度小。