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 (Stopped update since Sep 2016)
pod 'GrowingTextView', :git => 'https://github.com/KennethTsang/GrowingTextView.git', :branch => 'swift2'
Copy GrowingTextView.swift
into your project.
Programmatically
let textView = GrowingTextView()
textView.delegate = self
addSubview(textView)
Storyboard
- Drag a TextView into Storyboard.
- Set class to "GrowingTextView".
- Set delegate to it's view controller.
Sometime the view controller may incorrectly adjust the inset of textview automatically. To avoid this, set automaticallyAdjustsScrollViewInsets
to false
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = false
}
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. | UIColor(white: 0.8, alpha: 1.0) |
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
- Adopt
GrowingTextViewDelegate
instead of UITextViewDelegate. - Implement textViewDidChangeHeight.
- Call layoutIfNeeded() on superview inside the animation.
class ViewController: UIViewController, GrowingTextViewDelegate {
func textViewDidChangeHeight(_ textView: GrowingTextView, height: CGFloat) {
UIView.animate(withDuration: 0.2) {
self.view.layoutIfNeeded()
}
}
}
GrowingTextViewDelegate
is inherited from UITextViewDelegate. You may use it's delegate function as a normal UITextView.
class ViewController: UIViewController, GrowingTextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
...
}
func textViewDidEndEditing(_ textView: UITextView) {
...
}
}
Check out UITextViewDelegate here: https://developer.apple.com/reference/uikit/uitextviewdelegate
Kenneth Tsang, [email protected]
GrowingTextView is available under the MIT license. See the LICENSE file for more info.