【问题标题】:UIScrollView scroll by offsetUIScrollView 按偏移量滚动
【发布时间】:2015-10-09 11:54:38
【问题描述】:

我有这种情况:

  • 一个适合所有屏幕的滚动视图
  • 滚动视图中的 N 个“单元格”,每个单元格都包含一个标签
  • 每个单元格的高度为 80 像素
  • 固定绿色遮罩(UIView)

我以编程方式创建带有标签的单元格 (UIView),并正确设置了 scrollView 的 contentSize。

我知道

scrollView.setContentOffset(CGPoint(x: 0, y: 80.0), animated: true)

将滚动视图移动 80。

如何“覆盖”滚动视图行为以始终滚动 80? 我想要的是一种选择器行为..这可能吗?

【问题讨论】:

    标签: ios objective-c iphone swift uiscrollview


    【解决方案1】:

    当你的布局发生变化时,可以使用以下方法

    func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        myScrollView.contentOffset.y += 80
    }
    

    【讨论】:

      【解决方案2】:

      没有人正确回答问题,所以我像往常一样自己解决了:

      let viewHeight: CGFloat = 80.0
      
      func scrollViewWillBeginDragging(scrollView: UIScrollView) {
          startContentOffsetY = scrollView.contentOffset.y
      }
      
      func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
          targetContentOffsetY = targetContentOffset.memory.y
          if startContentOffsetY - targetContentOffsetY < 0 {
              scrollDirection = ScrollDirection.Bottom.rawValue
          } else {
              scrollDirection = ScrollDirection.Top.rawValue
          }
          let gap = targetContentOffsetY % viewHeight
          var offset: CGFloat = 0.0
          if (targetContentOffsetY - gap) % viewHeight == 0 {
              offset = -gap * scrollDirection
          } else {
              offset = gap * scrollDirection
          }
          let newTarget = targetContentOffsetY + (offset * scrollDirection)
          targetContentOffset.memory.y = newTarget
      }
      

      【讨论】:

        【解决方案3】:

        可能是这样的: (您需要添加一些验证) 为您的滚动视图创建一个委托类 (UIScrollViewDelegate)

        现在在你的 UIScrollViewDelegate 中添加这个函数

        myScrollView.delegate = instanceOfUIScrollViewDelegate;
        func scrollViewDidScroll(scrollView: UIScrollView) {
            scrollView.contentOffset.y+=80;
        }
        

        【讨论】:

          【解决方案4】:

          你可以用这个方法

          scrollView.setContentOffset( CGPoint(x:0,y:30), animated:true )
          
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-16
            • 1970-01-01
            • 1970-01-01
            • 2016-06-08
            • 2014-05-23
            • 1970-01-01
            相关资源
            最近更新 更多