Centra el text en una UITextView, vertical y horizontalmente

Tengo una vista de tabla agrupada con una celda. En esta celda, estoy poniendo un UITextView en cellForRowAtIndexPath: y instantáneamente hago este primer Responder.

Mi problema es: cuando comienzo a escribir, el text está justificado a la izquierda, no está centrado horizontal y verticalmente como deseo. Esto es en iOS 7.

¿Cómo puedo centrar el text?

Resuelvo este problema observando el contenido de UITextView, cuando hay algún cambio en el contenido de Size, actualice el contenido de Offset.

Agregue el observador de la siguiente manera:

 [textview addObserver:self forKeyPath:@"contentSize" options:(NSKeyValueObservingOptionNew) context:NULL]; 

Maneje la acción del observador de la siguiente manera:

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { UITextView *txtview = object; CGFloat topoffset = ([txtview bounds].size.height - [txtview contentSize].height * [txtview zoomScale])/2.0; topoffset = ( topoffset < 0.0 ? 0.0 : topoffset ); txtview.contentOffset = (CGPoint){.x = 0, .y = -topoffset}; } 

Para hacer que el text de vista de text se centre horizontalmente, select la vista de text de la class .xib y vaya a la biblioteca y en ese set de Alineación como centro.

Disfrutar. 🙂

Muy buena solución! Esta es una solución Swift + Interface Builder para que pueda habilitarla en IB.

Lo pondré como parte de la biblioteca LSwift .

 extension UITextView { @IBInspectable var align_middle_vertical: Bool { get { return false // TODO } set (f) { self.addObserver(self, forKeyPath:"contentSize", options:.New, context:nil) } } override public func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject:AnyObject], context: UnsafeMutablePointer<Void>) { if let textView = object as? UITextView { var y: CGFloat = (textView.bounds.size.height - textView.contentSize.height * textView.zoomScale)/2.0; if y < 0 { y = 0 } textView.content_y = -y } } } public extension UIScrollView { public var content_x: CGFloat { set(f) { contentOffset.x = f } get { return contentOffset.x } } public var content_y: CGFloat { set(f) { contentOffset.y = f } get { return contentOffset.y } } }