我有一个 UIScrollView ,我希望它能够在两个方向上滚动(目前可以),但一次只能滚动一个。因此,例如,如果您开始水平滚动它,它根本不会垂直移动,直到您松开并开始垂直移动它。我怎么能这样做呢?
问问题
16328 次
4 回答
62
将directionalLockEnabled
属性设置为 YES。来自苹果文档:
如果此属性为 NO,则允许在水平和垂直方向上滚动。如果此属性为 YES 并且用户开始沿一个大致方向(水平或垂直)拖动,则滚动视图将禁用在另一个方向上的滚动。如果拖动方向是对角线,则滚动不会被锁定,用户可以向任意方向拖动,直到拖动完成。默认值为否
于 2012-06-12T17:46:19.940 回答
6
这个问题的公认答案并不完全正确。根据当前的文档directionalLockEnabled
(在原始答案中引用):
如果拖动方向是对角线,则滚动不会被锁定,用户可以向任意方向拖动,直到拖动完成。
我自己也发现了这种情况。如果拖动的初始方向接近 x 轴和 y 轴之间的 45 度角,则方向锁定将失败。如果您或多或少地水平或垂直拖动,则会激活锁定。
有关实现真正单轴锁定的一种方法,请参阅此链接: http ://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html
于 2015-05-12T14:39:43.847 回答
2
实现这一点的简单方法是像这样设置directionalLockEnabled
并YES
实现 UIScrollerView 委托
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x != 0 &&
scrollView.contentOffset.y != 0) {
scrollView.contentOffset = CGPointMake(0, 0);
}
}
于 2016-03-25T10:36:30.107 回答
1
根据@Joe xi 的回答,这对我有用。斯威夫特 3.0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}
}
于 2017-10-18T10:29:38.940 回答