【问题标题】:How to disable horizontal scrolling in UIScrollView?如何在 UIScrollView 中禁用水平滚动?
【发布时间】:2013-01-31 10:56:51
【问题描述】:

我的 scrollView 为 280(w) x 350(h),content view 为 840(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 和此处提供的解决方案:(How to lock the horizontal scrolling of a scrollView in iOS) 但由于某种原因它对我不起作用。

【问题讨论】:

标签: ios uiscrollview scroll


【解决方案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];

它应该可以工作。

【讨论】:

    【解决方案2】:

    试试这个

    - (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】:

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

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

      【讨论】:

        【解决方案4】:

        Swift 3,将UIScrollViewDelegate 设置为您的班级,然后使用以下代码。

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

        【讨论】:

          猜你喜欢
          • 2010-11-06
          • 1970-01-01
          • 2015-11-18
          • 1970-01-01
          • 2012-10-21
          • 1970-01-01
          • 2015-12-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多