UIScrollView 悬停设置
思想
这个蛋疼的办法也是我想了许久才解决,可能不是很优秀,希望看到的可以给我提点优化意见。
先上图:
大体思想如下:
- 起始界面的时候让下面那个UICollectionView(就是充满酷炫图片那个)的起点停留在(0,0)但是可以通过collectionView 的 sectionInset,让他下移。
//添加底部的图片展示瀑布流
CGFloat waterflowCellW = (ScreenW - 3.0 * PaddingBetweenCell)/2.0;
CGFloat waterflowCellH = waterflowCellW + 2.0*PaddingBetweenCell + HeightOfNameText + HeightOfPriceLText + 5;
UICollectionViewFlowLayout *flowLayoutForWaterflow = [[UICollectionViewFlowLayout alloc]init];
[flowLayoutForWaterflow setItemSize:CGSizeMake(waterflowCellW, waterflowCellH)];//设置cell的尺寸
[flowLayoutForWaterflow setScrollDirection:UICollectionViewScrollDirectionVertical];//设置其布局方向
//这里就是多加了 CGRectGetMaxY(_sortView.frame) 的距离让整个collectionview 看起来是在_sortView的下方
flowLayoutForWaterflow.sectionInset = UIEdgeInsetsMake(PaddingBetweenCell + CGRectGetMaxY(_sortView.frame), PaddingBetweenCell, PaddingBetweenCell, PaddingBetweenCell);//设置其边界
//然而在这里可以知道 起始位置时 (0,0)
CGFloat waterflowX = 0;
CGFloat waterflowY = 0;
CGFloat waterflowW = ScreenW + 1;
CGFloat waterflowH = self.view.height - 15 - 64 - 44;
UICollectionView *waterflowView = [[UICollectionView alloc]initWithFrame:CGRectMake(waterflowX, waterflowY, waterflowW, waterflowH) collectionViewLayout:flowLayoutForWaterflow];
- 监听scroll 也是最重要的方法
也就是我让他根据 偏移量来加减 Y;
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//if([scrollView isEqual: _waterflowView])
{
//当前位置
CGFloat currentPosition = scrollView.contentOffset.y;
//上一次纪录的位置 和 当前位置的差
CGFloat distance = lastPosition - currentPosition;
//纪录位置
lastPosition = currentPosition;
_muneView.y += distance;
//如果顶上那个西服没有离开屏幕,就让那个排序条的位置紧跟顶上的菜单栏,不然就等于 0实现悬停
if(CGRectGetMaxY(_muneView.frame) > 0.1)
{
_sortView.y = CGRectGetMaxY(_muneView.frame);
}
else
{
_sortView.y = 0;
}
}
}