获取 UIScrollView 的默认滚动方向 Swift

Get default scroll direction for UIScrollView Swift

我有一个应用程序使用了更多的 UIScrollViewsextensions,例如 UICollectionViewsUITableViews,为了一点活力,我创建了一些通用函数来帮助我有一些填充/边距。

我的函数是为 UIScrollView 创建的 extensions,我想在滚动视图为 only vertical.

时使用它们

我的问题

如何找到 UIScrollView 的滚动方向?

我已经找到了很多关于如何找到滚动方向的答案,但是我需要在 UIScrollView 初始化时找到它的滚动方向,如果它是 vertical or horizontal

感谢您的宝贵时间!

为了在滚动之前获得滚动方向,我能想到的一个解决方案是对有问题的 UIScrollView 的类型做出相应的反应。

所以第一步检查它是 UIScrollView、UICollectionView 还是 UITableView。

以 UITableView 为例

我认为这里的合理假设是滚动方向是垂直的

以UIScrollView为例

这可能有点棘手,但我想在这里您必须按照 Desdenova 的建议将滚动视图的内容大小与滚动视图的框架进行比较,这可以建议您是否可以水平和/或垂直滚动​​。

在 UICollectionView 的情况下

此数据将位于 UICollectionView 的布局中。

例如,我使用 FlowLayout 在 Storyboard 中设置了一个基本的 UICollectionView,其中没有任何数据。

然后我在适当的地方添加这段代码

if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout
{
    if layout.scrollDirection == .horizontal {
        print("horizontal")
    }
    else {
        print("vertical")
    }
}

这会打印出 horizontal

对于 UIScrollView,您必须使用 UIScrollViewDelegate scrollViewDidScroll ,它可以帮助您确定 UIScrollView 的滚动方向,您还必须添加一些检查以获取方向:

func scrollViewDidScroll(scrollView: UIScrollView!) {
    // Update ScrollView direction
    if self.lastContentOffset.y > scrollView.contentOffset.y && self.lastContentOffset.y < scrollView.contentOffset.y {
            // Vertical Scroll
    } else {
            // Horizontal Scroll
    }
}