iOS使UIScrollView分页仅针对一个方向启用

3

如问题标题所述,是否可以仅针对一个方向在UIScrollView中启用页面分页?

我有一个可以在x和y方向上滚动的UIScrollView,但我只想让其中一个方向进行分页,这可能吗?

我所能想到的唯一解决方案是在第一个UIScrollView中再放置另一个UIScrollView,这是唯一的解决方案吗?


这听起来像是一个非常复杂的设计。你考虑过其他方法吗?比如将你的用户界面分解成tableViewCells,然后只水平滚动其中一个(或多个)? - Simon McLoughlin
我不能使用TableView,设计太复杂了。我必须使用ScrollView。 - allemattio
2个回答

1
你应该实现UIScrollViewscrollViewWillBeginDecelerating代理方法。
你应该在某个地方存储当前的content offset
然后比较你的滚动视图当前content offsety和上一次存储的content offsety。如果当前的y大于上一次存储的y,则滚动方向为向上;如果上一次存储的y大于当前的y,则方向为向下。现在,如果你想在向上方向上实现分页效果,则在检测到向上方向时,将新的content offset设置给你的scrollview。例如,如果当前的y偏移量为0,则将其设置为y+screenheight
你可以参考this so post来了解如何管理我所说的内容!

1
这是我的解决方法: 首先,设置你的scrollView的代理,代码可能如下所示:
scrollView.delegate = self

然后

var lastOffsetY: CGFloat = 0
var lastOffsetX: CGFloat = 0

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y != lastOffsetY {
        lastOffsetY = scrollView.contentOffset.y
        scrollView.isPagingEnabled = false
    } else {
        scrollView.isPagingEnabled = true
    }
    if scrollView.contentOffset.x != lastOffsetX {
        lastOffsetX = scrollView.contentOffset.x
        scrollView.isPagingEnabled = true
    } else {
        scrollView.isPagingEnabled = false
    }
}

这将使其仅在水平方向上可分页。对于垂直方向,只需翻转真/假值即可。


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