iOS 8.0 or above
GrowingTextView is available through CocoaPods. To install it, simply add the following line to your Podfile:
Swift 3
pod "GrowingTextView"
Swift 2.3
pod 'GrowingTextView', :git => 'https://github.com/KennethTsang/GrowingTextView.git', :branch => 'swift2'
Copy GrowingTextView.swift
into your project.
let textView = GrowingTextView()
addSubview(textView)
Parameter | Type | Description | Default |
---|---|---|---|
maxLength | Int | Maximum text length. Exceeded text will be trimmed. 0 means no limit. | 0 |
trimWhiteSpaceWhenEndEditing | Bool | Trim white space and new line characters when textview did end editing. | true |
placeHolder | String? | PlaceHolder text. | nil |
placeHolderColor | UIColor? | PlaceHolder text color. | nil |
placeHolderLeftMargin | CGFloat | Left margin of PlaceHolder text. | 5.0 |
maxHeight | CGFloat | Maximum height of textview. | 0.0 |
textView.maxLength = 140
textView.trimWhiteSpaceWhenEndEditing = false
textView.placeHolder = "Say something..."
textView.placeHolderColor = UIColor(white: 0.8, alpha: 1.0)
textView.maxHeight = 70.0
textView.backgroundColor = UIColor.whiteColor()
textView.layer.cornerRadius = 4.0
To animate the height change, adopt GrowingTextViewDelegate protocol instead of UITextViewDelegate.
class ViewController: UIViewController, GrowingTextViewDelegate {
...
Implement textViewDidChangeHeight. Call layoutIfNeeded() inside an animation.
func textViewDidChangeHeight(_ height: CGFloat) {
UIView.animate(withDuration: 0.2) {
self.textView.layoutIfNeeded()
}
}
In some cases, you may also need to animate it's superview, e.g. toolbar.
func textViewDidChangeHeight(_ height: CGFloat) {
UIView.animate(withDuration: 0.2) {
self.myToolbar.layoutIfNeeded()
}
}
Kenneth Tsang, kenneth.tsang@me.com
GrowingTextView is available under the MIT license. See the LICENSE file for more info.