在UITextView垂直和水平居中文本

我有一个单元格的分组表格视图。 在这个单元格中,我把一个UITextView放在cellForRowAtIndexPath: ,我立即做出了第一个响应者。

我的问题是:当我开始input时,文本左alignment,而不是水平和垂直居中,如我所愿。 这是在iOS 7上。

我怎么能中心的文字?

我通过观察UITextView的内容来解决这个问题,当contentSize有任何改变时,更新contentOffset。

添加观察者如下:

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

处理观察者的行动如下:

 -(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}; } 

要使textview文本水平居中,请从.xib类中selecttextview并转到该库,然后将Alignment设置为中心。

请享用。 🙂

很好的解决scheme! 这是一个Swift + Interface Builder解决scheme,以便您可以在IB中启用它。

我将把它作为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 } } }