的UIScrollView仅在一个方向上以时间滚动(UIScrollView scrolling i

2019-06-25 10:13发布

我有一个UIScrollView,我希望它能够在两个方向上滚动(它目前如此),但只有一次一个。 所以,举例来说,如果你开始横向滚动,它不会,直到你放手,开始上下移动它垂直移动的。 我怎么会去这样做呢?

Answer 1:

设置directionalLockEnabled属性设置为YES。 从苹果的文档:

如果此属性为NO,滚动被允许在水平和垂直方向。 如果此属性为是,并且用户开始在一个总的方向(水平或垂直)拖动,滚动视图禁用在另一个方向上滚动。 如果拖动方向是对角,然后滚动不会被锁定,直到拖拽完成,用户可以在任意方向拖动。 默认值是NO



Answer 2:

对于这个问题的接受的答案是不完全正确的。 根据当前文档directionalLockEnabled (引自原答案):

如果拖动方向是对角,然后滚动不会被锁定,直到拖拽完成,用户可以在任意方向拖动。

我发现这是事实我自己。 如果拖动的初始方向更接近x和y轴之间的45度角,定向锁定失败。 如果您将更多或更少的水平或垂直,锁定激活。

对于一个方法来实现真正的单向轴向锁定,请参阅此链接: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html



Answer 3:

简单的方式来实现,这是设置directionalLockEnabledYES和实施UIScrollerView代表这样

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x != 0 &&
        scrollView.contentOffset.y != 0) {
        scrollView.contentOffset = CGPointMake(0, 0);
    }
}


Answer 4:

这为我工作基础上@Joe十一答案。 雨燕3.0

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
        scrollView.contentOffset = CGPoint(x: 0, y: 0)
    }
}


文章来源: UIScrollView scrolling in only one direction at a time