ios - 如何快速更改 Collection View 的高度

标签 ios swift scroll uicollectionview uitextfield

我在 ui View 上有一个 Collection View 和一个文本字段。 最初,我在 ui View 的顶部有一个文本字段,然后我将 Collection View 顶部 anchor 约束设置到文本字段的底部。

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

最佳答案

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

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

  • 文本字段的底部被限制在 Collection View 的顶部
  • 文本字段的顶部被约束到 View 的顶部布局指南 - 这是由 ScrollView 委托(delegate)代码修改的约束
  • 随着 Collection View 向上滚动,文本字段将向上移动并淡出

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

关于ios - 如何快速更改 Collection View 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47214054/

相关文章:

swift - 如何在 Swift 中将从枚举接收到的值转换为字符串?

javascript - 当页面在移动设备上滚动得太远时,DOM 中会发生什么?

ios - 对象已保存时如何向现有模型添加参数?

iOS 8 - 在应用程序之间共享文档目录

swift - 分段控制不会切换到第二个容器

swift - 带有 UICollectionView 的 UIToolBar

vba - 使我的解析器向下滚动时出现问题

c# - 如何在.NET中实现平滑滚动

ios - 在 UITableViewCell iOS 中播放视频

ios - 如何点击 UITableViewCell 中的 UIButton 并转换到新的 View Controller ,并向其传递信息?