Ios 如何在UIScrollView中禁用水平滚动?

Ios 如何在UIScrollView中禁用水平滚动?,ios,uiscrollview,scroll,Ios,Uiscrollview,Scroll,我有一个280(宽)x350(高)的滚动视图和840(宽)x405(高)的内容视图 我使用分段控件在视图之间切换,如下所示: - (IBAction)segmentedClicked:(UISegmentedControl *)sender { CGFloat x = sender.selectedSegmentIndex * self.personalDetailsScrollView.frame.size.width; CGPoint point = CGPointMake(

我有一个280(宽)x350(高)的
滚动视图和840(宽)x405(高)的
内容视图

我使用分段控件在视图之间切换,如下所示:

- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
    CGFloat x = sender.selectedSegmentIndex * self.personalDetailsScrollView.frame.size.width;
    CGPoint point = CGPointMake(x, 0);
    [self.personalDetailsScrollView setContentOffset:point animated:YES];
}
我想禁用常规水平滚动,这样只有分段按钮才能水平滚动视图。垂直滚动应保持活动状态


尝试使用-(void)scrollViewDidScroll和此处提供的解决方案:()但由于某些原因,它对我无效。

我没有尝试过,但我会采取以下方法:

UIScrollView
中,有一个属性:

@property(非原子,只读)UIPangESTURE识别器*PangESTURE识别器

因此,我将创建自己的新
uipangestrerecognizer
扩展和覆盖:

- (CGPoint)translationInView:(UIView *)view
{
    CGPoint tmp = [super translationInView:view];
    return CGPointMake(0, tmp.y);
}
将该手势识别器添加到
滚动视图
,然后调用:

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:youCustomOne];
它应该能用。

试试这个

- (IBAction)segmentedClicked:(UISegmentedControl *)sender
{
    if(sender.selectedSegmentIndex == 0)
    {
       CGPoint point = CGPointMake(0, 0);
    }
    else
    {
       CGPoint point = CGPointMake(self.personalDetailsScrollView.frame.size.width, 0);
     }
    [self.personalDetailsScrollView setContentOffset:point animated:YES];
    }

我知道这是一个迟来的答案,但我看到仍然没有被接受的答案,所以我会试一试


听起来你要做的是使用一个控制器来有效地控制3个独立的屏幕。您正试图根据用户在
UISegmentedControl
中选择的内容在屏幕之间切换,您不希望用户仅通过水平滑动就能在视图之间平移。为什么不使用3个不同的视图控制器?我认为这是设置您尝试执行的操作的更理想的方法,因此您会发现它更容易实现。

Swift 3,将
UIScrollViewDelegate
设置到您的类中,然后使用下面的代码

scrollView.isDirectionalLockEnabled = true

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.x>0 {
            webView.scrollView.contentOffset.x = 0.0
        }
    }

尝试根据宽度大小更改滚动视图内容大小这可能有帮助吗?只需将其
contentSizeWidth
0!!