【发布时间】:2015-03-24 11:14:14
【问题描述】:
我想自动调整 UITextView 的大小,类似于 sms-app 或 whatsapp。我只找到了objective-c的解决方案,示例项目的代码太多。我在 Swift 中需要这个。
问:当用户输入带有换行符的消息时,如何根据字体大小调整 UITextView 的大小?
【问题讨论】:
标签: swift xcode6 uitextview uitextviewdelegate
我想自动调整 UITextView 的大小,类似于 sms-app 或 whatsapp。我只找到了objective-c的解决方案,示例项目的代码太多。我在 Swift 中需要这个。
问:当用户输入带有换行符的消息时,如何根据字体大小调整 UITextView 的大小?
【问题讨论】:
标签: swift xcode6 uitextview uitextviewdelegate
您可以使用 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
}
【讨论】:
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
}
【讨论】: