How can I disable vertical scrolling in my UITextView? I want it to basically just scroll horizontally.
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.
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)
}
why not just use a UITextField if you dont want vertical scrolling?
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];
}
}
}
You can change it from Xcode -
Just set the contentSize
to the height of the view.
You'll use this:
CGSize scrollableSize = CGSizeMake(widthOfContent, heightOfView);
[myScrollView setContentSize:scrollableSize];