【问题标题】:How to change the height of the collection view in swift如何快速更改集合视图的高度
【发布时间】:2018-04-23 04:01:23
【问题描述】:

我在 ui 视图上有一个集合视图和一个文本字段。 最初,我在 ui 视图顶部有一个文本字段,然后我将集合视图顶部 Anchor 约束设置为文本字段的底部。

我想实现一种行为,如果我向下滚动集合视图,文本字段应该消失并且集合视图的顶部应该在同一个 ui 视图的顶部(这将隐藏文本字段)。当我向上滚动时,我希望约束与初始约束一样(容器视图的顶部 Anchor 应设置为文本字段的底部)。关于我如何实现这种行为的任何提示?我希望通过在向上滚动和向下滚动时更新约束来实现这一点。我该如何实现?

【问题讨论】:

  • UICollectionView 是 UIScrollView 的子类,因此您可以将代码设置为 UIScrollViewDelegate 并处理滚动事件

标签: ios swift scroll uicollectionview uitextfield


【解决方案1】:

UICollectionViewUIScrollView 的子类,因此您可以实现UIScrollViewDelegate 来获取滚动事件。

这是我在我的一个应用中使用的一些代码

  • 文本字段的底部被限制在集合视图的顶部
  • 文本字段的顶部被约束到视图的顶部布局指南 - 这是由滚动视图委托代码修改的约束
  • 当集合视图向上滚动时,文本字段将向上移动并淡出

extension ViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {

        let textHeight = self.textField.frame.size.height + 2
        let offset = min(scrollView.contentOffset.y, textHeight)

        if offset >= 0 || self.textFieldConstraint.constant != 0 {
            self.textFieldConstraint.constant = -offset
            let percent = max(1 - offset/textHeight,0)
            self.textField.alpha = percent
        }
    }
}

基本上你将文本字段“推”离屏幕顶部,不超过其高度+2

【讨论】:

  • 什么是 textFieldConstraint 和 searchHeight?
  • 抱歉,在我的原始代码中,我隐藏了一个搜索栏,我错过了对文本字段的一次编辑;我已经解决了。约束是文本字段的最高约束 - 我已经澄清了
  • 这样完美,你知道为什么textField和导航栏之间有空格吗?
  • 我不确定;我的视图中没有导航栏,因此您可能需要调整约束以使其按您的意愿工作,但一般技术应该可以工作。
【解决方案2】:

我认为这个解决方案可以完全为你工作,只需添加一个 UIScrollView 视图作为父视图,并将你的文本字段和集合视图放在滚动视图中,就像你设置的约束一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-20
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多