我有一个UIScrollView,我希望它能够在两个方向上滚动(目前都是这样),但一次只能滚动一个。因此,例如,如果您开始水平滚动它,它将不会垂直移动,直到您放开并开始垂直移动它。我怎么能这样做?
答案 0 :(得分:55)
将directionalLockEnabled
属性设置为YES。来自Apple文档:
如果此属性为NO,则允许在水平和垂直方向上滚动。如果此属性为YES并且用户开始沿一个大致方向(水平或垂直)拖动,则滚动视图将禁用向另一个方向滚动。如果拖动方向是对角线,则滚动将不会被锁定,并且用户可以向任何方向拖动,直到拖动完成。默认值为NO
答案 1 :(得分:5)
这个问题的公认答案并不完全正确。根据{{1}}的当前文档(在原始答案中引用):
如果拖动方向是对角线,则不会锁定滚动 并且用户可以向任何方向拖动,直到拖动完成。
我自己也发现了这种情况。如果初始拖动方向更接近x轴和y轴之间的45度角,则方向锁定失败。如果您在水平或垂直方向上或多或少地拖动,则会激活锁定。
要实现真正的单轴锁定,请参阅此链接: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html
答案 2 :(得分:2)
实现此目的的简单方法是将directionalLockEnabled
设置为YES
并像这样实现UIScrollerView委托
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView.contentOffset.x != 0 &&
scrollView.contentOffset.y != 0) {
scrollView.contentOffset = CGPointMake(0, 0);
}
}
答案 3 :(得分:0)
根据@Joe xi的回答,这对我有用。 Swift 3.0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 {
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}
}