2015-11-20 4 views
1

У меня есть пользовательский класс NSTextAttachment, который я использую для масштабирования изображений внутри UITextView (на основе answer here). Это отлично работает в режиме portrait. В режиме landscape изображения не покрывают весь экран, и я хочу их центрировать в textview.Вертикально центр NSTextAttachment в UITextView

Выполнение изменений в границах пользовательского класса (в attachmentBoundsForTextContainer:) не имеет значения (попытался изменить как x, так и y в границах). Как иначе это можно изменить? Благодарю.

ответ

2

Вертикально центрировать содержимое UITextView.

В видуWillAppear вашего UIViewController.

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

Ввиду того, что вы видите UIViewController.

textView.removeObserver(self, forKeyPath: "contentSize") 

Переопределить наблюдениеValueForKeyPath в вашем UIViewController.

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 

    if keyPath == "contentSize" { 

     let height = textView.bounds.size.height 
     let contentHeight = textView.contentSize.height 
     let zoom = textView.zoomScale 
     let top = (height - contentHeight * zoom)/2.0 
     textView.contentInset.top = top < 0.0 ? 0.0 : top 
    } 
} 

Горизонтально центрировать содержание в NSAttributtedString внутри UITextView.

let attachment = NSTextAttachment() 
let attachmentAttrString = NSAttributedString(attachment: attachment) 
let result = NSMutableAttributedString(attributedString: attachmentAttrString) 

let paragraphStyle = NSMutableParagraphStyle() 
paragraphStyle.alignment = .Center 

let attrs:[String:AnyObject] = [NSParagraphStyleAttributeName: paragraphStyle] 
let range = NSMakeRange(0, result.length) 
result.addAttributes(attrs, range: range) 

textView.attributedText = result 
Смежные вопросы