2015-03-24 2 views
1

Я хотел бы авторизовать UITextView, подобный sms-app или whatsapp. Я нашел решение для цели-c, а в примерах проектов слишком много кода. Мне нужно это в Свифт.Swift growth UITextView using autolayout

В: Как изменить размер UITextView по размеру шрифта, когда пользователь печатает сообщение с помощью linebreak?

ответ

3

Вы можете сделать это с помощью UITextViewDelegate. Я не знаю, как это сделать с помощью AutoLayout.

func textViewDidChange(textView: UITextView) 
    { 
     var fixedWidth : CGFloat = textView.frame.size.width 
     var newSize : CGSize = textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT))) 
     var newFrame : CGRect = textView.frame 
     newFrame.size = CGSizeMake(CGFloat(fmaxf((Float)(newSize.width), (Float)(fixedWidth))),newSize.height) 

     textView.frame = newFrame 
    } 
+0

Спасибо Элвин. С автозапуском это не сработает. Я нашел библиотеку object-c, используя автозапуск. Импорт этого в мой проект Swift решил мою проблему. Библиотека находится на github: https://github.com/MatejBalantic/MBAutoGrowingTextView – masterWN

0
var textStorage: NSTextStorage! 
var layoutManager: NSLayoutManager! 
var textContainer: NSTextContainer! 
var textPreview: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    textStorage = NSTextStorage() 
    layoutManager = NSLayoutManager() 
    textStorage.addLayoutManager(layoutManager) 

    let newTextViewRect = view.bounds 
    let containerSize = CGSize(width: newTextViewRect.width, height: CGFloat.max + 5) 

    textContainer = NSTextContainer(size: containerSize) 
    layoutManager.addTextContainer(textContainer) 

    textPreview = UITextView(frame: newTextViewRect, textContainer: textContainer) 
    textPreview.font = UIFont(name: "Helvetica", size: 16) 
    view.addSubview(textPreview) 

    configureView() 

    let length = count(textPreview.text) 
    let range:NSRange = NSMakeRange(length , 1) 
    textPreview.scrollRangeToVisible(range) 

} 

override func viewDidLayoutSubviews() { 
    textPreview.frame = view.bounds 
}