【问题标题】:iOS make UIScrollView paging enabled only for one directioniOS 使 UIScrollView 分页仅对一个方向启用
【发布时间】:2017-01-26 23:37:36
【问题描述】:

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

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

我想到的唯一解决方案是在第一个内部添加另一个UIScrollView,这是唯一的解决方案吗?

【问题讨论】:

  • 这听起来像是一个非常复杂的设计。您是否考虑过其他方法?比如将你的 UI 分解成 tableViewCells?并且只有一个(或多个)水平滚动?
  • 我不能使用TableViews,设计太复杂了。我必须使用滚动视图

标签: ios iphone swift uiscrollview


【解决方案1】:

你应该实现scrollViewWillBeginDecelerating delegate method ofUIScrollview`。

您应该将当前的content offset 存储在某处。

然后比较滚动视图的当前content offset 和最后存储的content offsety。如果当前y 更大,则滚动方向为up side,如果最后存储的y 更大,则方向为down side。现在,如果您希望 pagingup direction 产生影响,那么只有当您检测到 up direction 时,将新的 content offset 设置为您的 scrollview。例如,如果当前y 偏移量是0,则将其设置为y+screenheight

您可以参考this so post 获得一些指导来管理我所说的内容!

【讨论】:

    【解决方案2】:

    我就是这样解决的:

    首先,设置您的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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      • 1970-01-01
      相关资源
      最近更新 更多