UITextView - disable vertical scrolling

后端 未结 7 2139
野性不改
野性不改 2021-01-06 06:50

How can I disable vertical scrolling in my UITextView? I want it to basically just scroll horizontally.

相关标签:
7条回答
  • 2021-01-06 07:28

    In some circumstances, when trying to clamp down on unwanted UITextView scrolling I have found it helpful to add something like the following to the UITextView delegate (this is a UIScrollView delegate method but, of course, UITextView inherits from UIScrollView). This might work for you.

    - (void)scrollViewDidScroll:(id)scrollView
    {
          CGPoint origin = [scrollView contentOffset]; 
          [scrollView setContentOffset:CGPointMake(origin.x, 0.0)];
    }
    

    What about the scrollEnabled property? Setting the scrollEnabled property to NO stops the user from scrolling (in both directions), but there are occasions where the system sends setContentOffset:animated: messages to a UITextView. The scrollEnabled property applies to both vertical and horizontal scrolling. Given your question, you might want to leave scrollEnabled as is.

    0 讨论(0)
  • 2021-01-06 07:34

    Solution for disabling vertical scrolling for Swift 4:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let origin: CGPoint = scrollView.contentOffset
        scrollView.contentOffset = CGPoint(x: origin.x, y: 0.0)
    }
    
    0 讨论(0)
  • 2021-01-06 07:36

    why not just use a UITextField if you dont want vertical scrolling?

    0 讨论(0)
  • 2021-01-06 07:41

    If you have your custom textView subclass, you can override -gestureRecognizerShouldBegin to disable the scroll.

    -(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
        if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])
        {
            if (gestureRecognizer.view == self)
            {
                return NO;
            }
            else
            {
                return [super gestureRecognizerShouldBegin: gestureRecognizer];
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-06 07:42

    You can change it from Xcode -

    0 讨论(0)
  • 2021-01-06 07:46

    Just set the contentSize to the height of the view.

    You'll use this:

    CGSize scrollableSize = CGSizeMake(widthOfContent, heightOfView);
    [myScrollView setContentSize:scrollableSize];
    
    0 讨论(0)
提交回复
热议问题