2014-02-10 4 views
5

Как выровнять текст по горизонтали & по вертикали в UITextView? Я хочу выровнять текст в UITextView с горизонтальным выравниванием & вертикальное выравнивание. Есть ли какой-либо пользовательский способ? Пожалуйста, помогите мне .....Как выровнять текст по горизонтали и вертикали в UITextView?

ответ

7

Насколько я знаю, нет встроенного метода вертикального выравнивания UITextView. Однако, обновив contentOffset вы можете получить вертикально центрированный текст:

[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}; 
} 
+0

Куда уходит этот код? (ViewController.m?) – Cindeselia

+0

@Cindeselia Способ написания кода, вам нужно будет добавить его там, где находится текстовое представление. – Gad

+0

Обратите внимание, что изменение содержимого CreateOffset работает только в том случае, если флажок «Выбираемый» текстового вида отмечен – Maiaux

0

Вы должны обеспечить контекст на то, что вы имеете в виду делать, если вы хотите изменить горизонтальное и вертикальное выравнивание,

UITextView имеет контейнер и свойство кадра, которые вы можете выровнять с другим UITextview/Imageview и т. д. Свойство frame имеет начало и размер, который вы можете изменить, чтобы выровнять ваши представления.

Текст в UITextview имеет свойство, называемое textalignment, которое вы можете установить в NSTextAlignmentLeft, NSTextAlignmentJustified. Как и было предложено, вы также можете настроить свойство смещения содержимого контейнера, но я считаю, что настройка рамки более прямолинейна.

-4
self.qtyField.textAlignment = NSTextAlignmentCenter; 
5

Вертикальное выравнивание средней с Swift:

В viewDidLoad:

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

Потом где-то в вашем контроллере представления:

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) 

} 

где TextField подключается до фактического текстовое поле в вашем представлении.

+0

, который работает правильно, но каким-то образом он не работает с развязкой segue ... любая идея почему? – SKYnine

24

Это быстрое решение и отличается от этого, поскольку вставки и смещения содержимого немного изменились. Это решение работает в Xcode 7 беты 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 изменила, как зачеты контента и вставки работы это слегка модифицированный раствор теперь требуется, чтобы верхние на вставке содержимого вместо смещения.

/// 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 
} 
+1

Это отлично работает для меня с IOS 9/Swift 2 спасибо! – Kitson

+0

Awesome .. работал для меня. впустую почти 2 часа. –

+0

Спасибо, Работал для меня сэкономил время –

Смежные вопросы