Вопрос:

Как выровнять текст по горизонтали и вертикали в UITextView?

ios uitextview

25273 просмотра

4 ответа

109 Репутация автора

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

Автор: JKMania Источник Размещён: 10.02.2014 05:25

Ответы (4)


7 плюса

2533 Репутация автора

Решение

Насколько я знаю, нет встроенного метода для вертикального выравнивания 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};
}
Автор: Gad Размещён: 10.02.2014 06:48

0 плюса

1217 Репутация автора

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

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

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

Автор: Paulo Размещён: 10.02.2014 07:44

5 плюса

56 Репутация автора

Вертикально выравнивая середину с 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 связан с фактическим текстовым полем в вашем представлении.

Автор: maxmzd Размещён: 15.06.2015 09:17

26 плюса

952 Репутация автора

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

/// 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
}
Автор: Hamer Размещён: 06.09.2015 05:34
Вопросы из категории :
32x32