滚动

时间:2015-09-14 09:03:52

标签: ios swift uicollectionview

我正在寻找以下内容,请参阅下面的2张图片。 我有一个UICollectionView和一个UILabel(绿色区域)。

我希望,当向下滚动时,降低集合的高度并增加UILabel向上滚动的高度(类似于iPhone在上下滚动时使用搜索栏在Safari上执行的操作)。 我试过的是以下内容:

func scrollViewDidScroll(scrollView: UIScrollView!) {
    collectionView.frame=CGRectMake(0.0, collectionView.frame.origin.y-1, 375, collectionView.frame.height+1);
}

起初它开始正常,高度正在增加,但突然UICollectionView的高度变小然后再次开始增加。然后它做同样的

下面我显示了print(collectionView.frame)

的结果

我的解决方案中是否有错误? 还有另一种方法可以实现吗?与约束有关吗?

感谢。

C.C。

(0.0, 174.0, 375.0, 493.0)
(0.0, 173.0, 375.0, 494.0)
(0.0, 172.0, 375.0, 495.0)
(0.0, 190.0, 375.0, 477.0)
(0.0, 189.0, 375.0, 498.0)
(0.0, 188.0, 375.0, 499.0)
(0.0, 187.0, 375.0, 500.0)

enter image description here

1 个答案:

答案 0 :(得分:1)

scrollViewDidScroll中提出的解决方案是省略滚动的方向 - 基本上你是这样说的:移动集合视图并在用户滚动时增加其大小。但你不是在说它是上升还是下降。我通过保存最后一个scrollView' s contentOffset.y处理方向,然后执行简单的if:

if self.lastScrollViewContentOffset > scrollView.contentOffset.y {
    // mumbo jumbo when scrolling up
} else {
    // mumbo jumbo when scrolling down
}

另外请注意,此方法是您应该使用的方法之一,以使其平滑和连续。滚动发生后调用此方法:

  

委托通常实现此方法以从scrollView获取内容偏移量的更改并绘制内容视图的受影响部分。

但是如果只拖一半你可能会发现自己处于不一致的状态(我知道这是因为我实现了类似的东西),所以也要实现委托方法scrollViewDidEndDragging,你需要记住它可能不会减速因此,您需要添加额外的动画才能使UI保持一致。