UIScrollView通过偏移量滚动

6
我有一个这样的情况:
  • 一个scrollView适合所有屏幕
  • N个"单元格"在scrollView中,每个都包含一个标签
  • 每个单元格高度为80px
  • 固定的绿色遮罩(UIView)

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

我知道

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

移动滚动视图80个单位。

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

enter image description here

4个回答

6
当您的布局发生变化时,您可以使用以下方法。
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
}

1

也许应该像这样: (您需要添加一些验证) 为您的滚动视图(UIScrollViewDelegate)创建一个委托类

现在在您的UIScrollViewDelegate中添加此函数

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

0

你可以使用这个方法

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接