【问题标题】: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 )