¿Cómo alinear text horizontal y verticalmente en UITextView?

¿Cómo alinear text horizontal y verticalmente en UITextView? Quiero alinear text en UITextView con alignment horizontal y alignment vertical. ¿Hay alguna forma personalizada? Por favor, ayúdame…..

Por lo que sé, no existe un método incorporado para la alignment vertical de una UITextView . Sin embargo, al actualizar el contenido del contentOffset , puede get text centrado verticalmente:

 [textView setTextAlignment:NSTextAlignmentCenter]; - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [textView addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [textView removeObserver:self forKeyPath:@"contentSize"]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { UITextView *tv = object; CGFloat topCorrect = ([tv bounds].size.height - [tv contentSize].height * [tv zoomScale])/2.0; topCorrect = ( topCorrect < 0.0 ? 0.0 : topCorrect ); tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect}; } 

Esta es una solución Swift y ahora es diferente ya que las inserciones de contenido y las compensaciones han cambiado ligeramente. Esta solución funciona en Xcode 7 beta 6.

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) textView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.New, context: nil) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) textView.removeObserver(self, forKeyPath: "contentSize") } 

Apple ha cambiado la forma en que funcionan las correcciones de contenido y los recuadros. Ahora se requiere esta solución ligeramente modificada para establecer la parte superior en la inserción de contenido en lugar del desplazamiento.

 /// Force the text in a UITextView to always center itself. override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { let textView = object as! UITextView var topCorrect = (textView.bounds.size.height - textView.contentSize.height * textView.zoomScale) / 2 topCorrect = topCorrect < 0.0 ? 0.0 : topCorrect; textView.contentInset.top = topCorrect } 

Alineando verticalmente en el medio con Swift:

En viewDidLoad:

 textField.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.New, context: nil) 

Luego, en otro lugar en su controller de vista:

 override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { var topCorrect : CGFloat = (textField.frame.height - textField.contentSize.height); topCorrect = topCorrect < 0.0 ? 0.0 : topCorrect / 2 textField.contentOffset = CGPoint(x: 0, y: -topCorrect) } 

donde textField está cableado hasta el campo de text real en su vista.

Debe proporcionar el context de lo que quiere hacer cuando quiera cambiar la alignment horizontal y vertical,

UITextview tiene un contenedor y una propiedad de marco que puede alinearse con otra UITextview / Imageview, etc. La propiedad frame tiene un origen y un tamaño que puede modificar para alinear sus vistas.

El text dentro de UITextview tiene una propiedad llamada alignment de text que puede establecer en NSTextAlignmentLeft, NSTextAlignmentJustified. Como se sugirió, también puede ajustar la propiedad de desplazamiento de contenido del contenedor, pero me parece que ajustar el marco es más sencillo.

 self.qtyField.textAlignment = NSTextAlignmentCenter;