Disable Horizontal Scrolling to UITextView Program

2019-02-21 02:21发布

问题:

I'm looking for a way to disable horizontal scrolling of a UITextView programmatically, it was easy via the Interface Builder, but since I'm designing the view programmatically I can't find a way to do this, I've googled it as well but the most I got was this:

How to stop the horizontal scrolling programmatically?

and it is not working. Any hints?

self.textViewOpenedRect = CGRectMake(20, 20, 280, 130);
self.textView = [[UITextView alloc] initWithFrame: self.textViewOpenedRect];
self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5);
self.textView.delegate = self;
self.textView.backgroundColor = [UIColor clearColor];
self.textView.contentSize = CGSizeMake( self.textView.frame.size.height, self.textView.contentSize.height);

self.textView.alwaysBounceHorizontal = NO;
self.textView.bounces = NO;

UPDATE: apparently the problem is because of that line of code:

self.textView.contentInset = UIEdgeInsetsMake(5, 5, 5, 5);

wich I use to have a bit of space between the frame and the text. . .am I doing it properly?

回答1:

This should help... UITextView is a subclass of UIScrollView, so this is pretty easy to implement.

mytextView.contentSize = CGSizeMake(mytextView.frame.size.height,mytextView.contentSize.height);

mytextView.showsHorizontalScrollIndicator = NO;


回答2:

Just to add a bit here, that "tiny bit of scrolling left and right" even after you disable horizontal scrolling is caused by the ContentInsets. The following disables that:

self.textView.contentInset = UIEdgeInsetsMake(5, 0, 5, 0);


回答3:

With custom insets i found the best solution for me is to subclass the UITextView and then in the layoutSubviews call the following code.

-(void) layoutSubviews
{
    // always keep content offset at x = 0
    self.contentOffset = CGPointMake(0, self.contentOffset.y );
    [super layoutSubviews];
}

Hope this helps someone.