我在 ui View 上有一个 Collection View 和一个文本字段。 最初,我在 ui View 的顶部有一个文本字段,然后我将 Collection View 顶部 anchor 约束设置到文本字段的底部。
我想实现一种行为,如果我向下滚动 Collection View ,文本字段应该消失并且 Collection View 的顶部应该位于同一 ui View 的顶部(这会隐藏文本字段)。当我向上滚动时,我希望约束与初始约束一样(容器 View 的顶部 anchor 应设置为文本字段的底部)。关于如何实现此行为的任何提示?我希望通过在向上滚动和向下滚动发生时更新约束来实现这一点。我该如何实现?
最佳答案
UICollectionView
是 UIScrollView
的子类,因此您可以实现一个 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/