【问题标题】:How to hide a UIView while scrolling?如何在滚动时隐藏 UIView?
【发布时间】:2017-10-11 15:35:38
【问题描述】:

我正在努力实现这个效果。

我试图在用户向上滚动时隐藏视图,并在用户向下滚动时显示它。

我不知道该怎么做。 我曾尝试将其视为 scrollView didScroll 功能,但我不知道如何设置它。有什么建议吗?

【问题讨论】:

  • 显示到目前为止你做了什么?
  • 另外确认一下,你的视图是简单的 UIView 还是 tableView 还是 collectionView ?
  • 我敢打赌,在didScroll 方法中记住scrollView 的最后一个contentOffset。然后,如果您看到 scrollView 上升,您应该将您的自定义视图移动(动画)到某个点(正如我与 alpha 一起看到的)。当你注意到它下降时,做相反的事情(也仅限于某个点)。
  • @cole 我什么都没做,因为我什至不知道从哪里开始。你们不必给我一个代码答案。我可以弄清楚。我需要什么我将如何去做。
  • @cole 甚至我的谷歌搜索也很困难。我是否搜索“隐藏标题”?我不确定这叫什么。我正在使用 UICollectionView。但我也会对 UITableView 进行解释。我认为它们都是 UIScrollView 的子类。

标签: ios objective-c swift uiview uiscrollview


【解决方案1】:

Hiding content on scroll

请检查这个库,它与您附加的 gif 完全一样。

另一种方法是从您附加的 gif 文件中获取。 在顶部添加搜索栏。并将隐藏部分作为标题并对齐搜索栏和表格视图以获得该动画。

【讨论】:

    【解决方案2】:

    我是这样解决的:

    private var lastContentOffset: CGFloat = 0
    
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
       lastContentOffset = scrollView.contentOffset.y
    }
    
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if lastContentOffset > scrollView.contentOffset.y {
            UIView.animate(withDuration: 0.25, animations: { [weak self] in
                self?.addDeviceButton.alpha = 1.0
                self?.addDeviceButton.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            }, completion: nil)
        } else if lastContentOffset < scrollView.contentOffset.y {
            UIView.animate(withDuration: 0.25, animations: { [weak self] in
                self?.addDeviceButton.alpha = 0
                self?.addDeviceButton.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
            }, completion: nil)
        }
    }
    

    【讨论】:

      【解决方案3】:

      你需要设置滚动视图的容器视图和你想要隐藏的视图作为滚动视图的代理,注册这个类以符合 UIScrollViewDelegate 协议。

      您还需要跟踪滚动视图的内容偏移属性,并将其设置为滚动视图创建时的初始偏移量:

      fileprivate var scrollOffset : CGPoint
      

      然后,如你所说,使用 scrollViewDidScroll 方法:

      internal func scrollViewDidScroll(_ scrollView: UIScrollView) {
          let delta : CGPoint = CGPoint(x: scrollView.contentOffset.x - scrollOffset.x, 
              y: scrollView.contentOffset.y - scrollOffset.y)
      
          if delta.y > 0, subviewToFade.isDescendant(of: self) {
                 // fade out subviews and remove
          else if delta < 0, !subviewToFade.isDescendant(of: self) {
                 // add subviews and fade back in
      
          }
      
          scrollOffset = scrollView.contentOffset
      }
      

      希望对您有所帮助。

      【讨论】:

        【解决方案4】:

        here is my constraints

        func scrollViewDidScroll(_ scrollView: UIScrollView) {
        
            setPosition(scrollView)
        }
        
        func setPosition(_ scrollView:UIScrollView) {
        
            if scrollView.contentOffset.y >= 20 {
                self.parentTopViewcontraints.constant = -95 // set postition till you want to hide your view 
                UIView.animate(withDuration: 0.5) {
                    self.view.layoutIfNeeded()
                }
            }else if scrollView.contentOffset.y <= 200 {
                self.parentTopViewcontraints.constant = 0 //set back 
                UIView.animate(withDuration: 0.5) {
                    self.view.layoutIfNeeded()
                }
            }
        }
        

        【讨论】:

        • 欢迎来到stackoverflow。请简要说明此代码的作用以及它如何解决问题中的问题。
        猜你喜欢
        • 2022-07-23
        • 2018-04-10
        • 2012-04-22
        • 2016-07-16
        • 2012-09-03
        • 1970-01-01
        • 2019-05-24
        • 2017-08-25
        • 2020-10-29
        相关资源
        最近更新 更多