我有一个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:
简单的方式来实现,这是设置directionalLockEnabled
到YES
和实施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