如何使用swift使用集合视图滚动视图

时间:2018-12-06 16:36:53

标签: swift uicollectionview scrollview

我在UIViewController中有一个集合视图。视图控制器还具有另一个UIView(我们将其称为welcomeView),它位于集合视图的上方。当我滚动浏览集合视图时,我希望welcomeView随之滚动。我已经看过这个答案https://stackoverflow.com/a/43215801/5124961,几乎可以总结出ID看起来的样子,减去了粘贴在顶部的视图。该解决方案的唯一问题是我的collectionView已经有一个标头,因此将welcomeView添加为集合视图的子层会将其添加到我不想要的已经存在的标头下。

只需使用以下代码段即可:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = collectionView.contentOffset.y
    if(offset > 0){
        self.welcomeView.frame = CGRect(x: 0, y: -offset, width: self.view.bounds.size.width, height: 100)
    }else{
        self.welcomeView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
    }
}

我得到这种效果:

enter image description here

我认为收集视图的框架必须根据偏移量而变化,但是不太确定如何在使用偏移量后实现此目的。我也看过其他一些与我类似的问题,但是这些问题是我不太熟悉的目标C。有没有人有办法解决吗?谢谢。

1 个答案:

答案 0 :(得分:0)

如果我从您的捕获中正确猜出,则您的欢迎视图不会覆盖集合视图。

基于此猜测,解决方案将是:

  1. 使集合视图转到控制器视图的顶部
  2. 您的欢迎视图可以与您的收藏视图重叠
  3. 为避免欢迎视图与集合视图的内容重叠,请修改集合视图的contentInset属性(contentInset的{​​{1}}应该与欢迎视图的属性相同高度)。
  4. 保留您的代码段
  5. 滚动指示符可能会在欢迎视图下消失。一个简单的解决方案是使欢迎视图具有透明的背景。感谢top和委托调用,可以确保在集合视图和欢迎视图的内容之间没有重叠。