我有一個單元格的分組表格視圖。在這個單元格中,我將UITextView
放入cellForRowAtIndexPath:
,我立刻做出了第一個響應者。垂直和水平居中文本在UITextView中
我的問題是:當我開始輸入時,文本是左對齊的,而不是水平和垂直居中,如我所願。這是在iOS 7上。
如何將文本居中?
我有一個單元格的分組表格視圖。在這個單元格中,我將UITextView
放入cellForRowAtIndexPath:
,我立刻做出了第一個響應者。垂直和水平居中文本在UITextView中
我的問題是:當我開始輸入時,文本是左對齊的,而不是水平和垂直居中,如我所願。這是在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類選擇的TextView和去圖書館並以此爲中心對齊。
享受。 :)
這就是我正在尋找的,非常感謝你! 只有一個問題:在我開始輸入之前,它與tableview單元格的底部對齊(光標位於底部)。當我開始打字時,它完全對齊。你知道如何解決這個問題嗎? – user3083408
如果你添加一個觀察者,不要忘記刪除它:[self.messageTextView removeObserver:self forKeyPath:@「contentSize」]; – ddiego
只有在檢查文本視圖的「可選」標誌時,更改contentOffset似乎纔有效 – Maiaux
非常好的解決方案!這是一個Swift
+ Interface Builder
解決方案,以便您可以在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
}
}
}
什麼是'textView.content_y'我似乎不明白? –
對不起@AbubakarOladeji應該是'contentOffset.y'。 –
您是否設置了對齊方式併發布了您的代碼? – Yohan
未設置對齊方式。 – user3083408