0

我有scrollView280(w) x 350(h) 和content view840(w) x 405(h)。

我像这样在视图之间切换segmented control

- (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和此处提供的解决方案:(如何在 iOS 中锁定 scrollView 的水平滚动)但由于某种原因它对我不起作用。

4

4 回答 4

1

我还没有尝试过,但这是我要采取的方法:

UIScrollView中,有一个性质:

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer

所以我会制作自己的新UIPanGestureRecognizer扩展并覆盖:

- (CGPoint)translationInView:(UIView *)view
{
    CGPoint tmp = [super translationInView:view];
    return CGPointMake(0, tmp.y);
}

将该手势识别器添加到scrollview,然后调用:

[scrollView.panGestureRecognizer requireGestureRecognizerToFail:youCustomOne];

它应该工作。

于 2013-02-15T13:02:27.777 回答
0

尝试这个

- (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];
    }
于 2013-02-15T13:07:00.580 回答
0

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

听起来您想要做的是使用 1 个控制器来有效地容纳 3 个单独的屏幕。您正在尝试根据用户在 a 中选择的内容在屏幕之间切换UISegmentedControl,并且您不希望用户能够通过水平滑动在视图之间平移。为什么不只有 3 个不同的视图控制器?我认为这是设置您正在尝试做的事情的更预期的方式,因此您会发现它更容易实现。

于 2013-10-10T16:36:48.223 回答
0

Swift 3,设置UIScrollViewDelegate为你的类,然后使用下面的代码。

scrollView.isDirectionalLockEnabled = true

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.x>0 {
            webView.scrollView.contentOffset.x = 0.0
        }
    }
于 2017-08-27T08:42:04.017 回答