ios objective-c uitextview

UITextView scrollEnabled=YES no funciona después de configurar scrollEnabled=NO en iOS8



objective-c (8)

Creo una demo para revisar UITextView scrollEnabled . Solo contiene 1 UITextView y 2 botones para activar y desactivar el desplazamiento

  • UITextView prueba en el simulador y en el dispositivo iOS 8, si hago clic en el botón Desactivar desplazamiento, el UITextView desactivará el desplazamiento correctamente, pero después de eso hago clic en Activar desplazamiento, el UITextView no activará el desplazamiento

  • Sin embargo, pruebo en el dispositivo iOS9, el habilitar y deshabilitar el desplazamiento funcionan bien.

    #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextView *myTextView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)enableScrollButtonPressed:(id)sender{ self.myTextView.scrollEnabled = YES; } - (IBAction)disableScrollButtonPressed:(id)sender{ self.myTextView.scrollEnabled = NO; } @end

¿Alguna idea para solucionar este problema? Si alguien no entiende mi explicación por favor revise mi proyecto de demostración.
Cualquier ayuda o sugerencia sería muy apreciada.


El problema es que en iOS 8, contentSize no se ajusta correctamente cuando se cambia scrollEnabled. Un pequeño ajuste a su método enableScrollButtonPressed solucionará el problema con éxito.

-(IBAction)enableScrollButtonPressed:(id)sender { self.myTextView.scrollEnabled = YES; self.myTextView.contentSize = [self.myTextView sizeThatFits:self.myTextView.frame.size]; }


Probé mi código y funcionó correctamente.

IBOutlet UITextView *tv; //---------Enable button action. -(IBAction)enable:(id)sender { tv.scrollEnabled=YES; } //---------Disable button action. -(IBAction)disable:(id)sender { tv.scrollEnabled=NO; }

Intente su código una vez más en el dispositivo.


Prueba este

func scrollViewDidScroll(_ scrollView: UIScrollView) { tableView.setContentOffset(CGPoint.zero, animated: false) }


Sí, tienes razón deshabilitando y habilitando el desplazamiento de la vista de texto no está funcionando en iOS8, puede ser un error o cualquier otra cosa, déjalo. Podemos deshabilitar o habilitar el desplazamiento de la vista de texto con solo cambiar el ContentSize de la vista de texto .

#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextView *myTextView; @end @implementation ViewController -(IBAction)enableScrollButtonPressed:(id)sender{ CGSize scrollableSize = CGSizeMake(self.myTextView.bounds.size.width+20, self.myTextView.bounds.size.height+20); [self.myTextView setContentSize:scrollableSize]; } -(IBAction)disableScrollButtonPressed:(id)sender{ [self.myTextView setContentOffset:CGPointMake(0, 0)]; [self performSelector:@selector(StopScroll) withObject:nil afterDelay:0.1]; } -(void)StopScroll{ CGSize scrollableSize = CGSizeMake(self.myTextView.bounds.size.width, self.myTextView.bounds.size.height/2); [self.myTextView setContentSize:scrollableSize]; } @end

Había probado el código anterior, está funcionando bien para mí, estoy usando xcode 7.2.1 y iOS 8.3 . Pruébalo y hazme saber el resultado.


cambiar su propiedad de la siguiente manera.

en su código ..

@property (weak, nonatomic) IBOutlet UITextView *myTextView;

cambiar el atributo de propiedad de la siguiente manera:

@property (strong, nonatomic) IBOutlet UITextView *myTextView;

entonces funcionará bien. Yo lo revisé.


debe diseñar sus vistas después de habilitar o deshabilitar la vista de desplazamiento en su vista.

utilice los métodos viewWillLayoutSubviews / layoutIfNeeded.


Después de buscar horas me encuentran de una manera

-(IBAction)enableScrollButtonPressed:(id)sender{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.myTextView.scrollEnabled = YES; [self.myTextView setText:self.myTextView.text]; self.myTextView.layoutManager.allowsNonContiguousLayout = false; }); } -(IBAction)disableScrollButtonPressed:(id)sender{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.myTextView.scrollEnabled = NO; }); }

La condición para eso es que necesitas desplazarte primero y luego funcionará perfectamente

Significa que cuando se pulsa el botón de desplazamiento desactivado, la vista de texto debe desplazarse en alguna posición y no debe estar en la posición predeterminada


Please follow below steps simply self.myTextView.scrollEnabled = NO; self.myTextView.userInteractionEnabled = YES; self.myTextView.scrollEnabled = YES;