GrowingTextView
[UNMAINTAINED] An UITextView which grows/shrinks with the text and starts scrolling when the content reaches a certain number of lines. Similar to the one Apple uses in the SMS-app. See blog-post for a small screencast.
Top Related Projects
⛔️**DEPRECATED** ⛔️ A drop-in UIViewController subclass with a growing text input view and other useful messaging features
Powerful text framework for iOS to display and edit rich text.
A beautiful rich text WYSIWYG editor for iOS with a syntax highlighted source view
Custom UITextFields effects inspired by Codrops, built using Swift
RichEditorView is a simple, modular, drop-in UIView subclass for Rich Text Editing.
Quick Overview
GrowingTextView is an iOS library that provides a text view that automatically grows and shrinks in height based on its content. It's designed to mimic the behavior of messaging apps where the input field expands as the user types more text, making it easier to view and edit longer messages.
Pros
- Seamless integration with existing UITextView functionality
- Customizable maximum and minimum height constraints
- Smooth animation when growing or shrinking
- Compatible with Auto Layout
Cons
- Limited to iOS platform only
- May require additional configuration for complex layouts
- Not actively maintained (last update was several years ago)
- Potential performance issues with very large amounts of text
Code Examples
- Basic usage:
let growingTextView = GrowingTextView()
view.addSubview(growingTextView)
- Setting maximum height:
growingTextView.maxHeight = 100.0
- Customizing animation duration:
growingTextView.animationDuration = 0.1
- Adding a placeholder:
growingTextView.placeholder = "Enter your message here..."
Getting Started
To use GrowingTextView in your project:
-
Add the following to your Podfile:
pod 'GrowingTextView'
-
Run
pod install
in your terminal. -
Import the module in your Swift file:
import GrowingTextView
-
Create and configure a GrowingTextView instance:
let growingTextView = GrowingTextView() growingTextView.placeholder = "Type here..." growingTextView.maxHeight = 100.0 growingTextView.minHeight = 40.0 view.addSubview(growingTextView)
-
Set up Auto Layout constraints as needed for your specific layout.
Competitor Comparisons
⛔️**DEPRECATED** ⛔️ A drop-in UIViewController subclass with a growing text input view and other useful messaging features
Pros of SlackTextViewController
- More comprehensive feature set, including autocomplete, mentions, and custom UI elements
- Better performance optimization for large message lists
- Active development and maintenance by Slack team
Cons of SlackTextViewController
- Steeper learning curve due to more complex implementation
- Heavier codebase, which may impact app size
- Potentially overkill for simpler text input requirements
Code Comparison
GrowingTextView:
- (void)textViewDidChange:(UITextView *)textView {
[self resizeTextView:textView];
}
- (void)resizeTextView:(UITextView *)textView {
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
}
SlackTextViewController:
- (void)textDidUpdate:(BOOL)animated {
[super textDidUpdate:animated];
if ([self.textView.text length] > 0) {
[self.rightButton setTitle:NSLocalizedString(@"Send", nil) forState:UIControlStateNormal];
} else {
[self.rightButton setTitle:nil forState:UIControlStateNormal];
}
}
The code snippets demonstrate that GrowingTextView focuses on resizing the text view, while SlackTextViewController handles more complex UI interactions and state management.
Powerful text framework for iOS to display and edit rich text.
Pros of YYText
- More comprehensive text rendering and editing capabilities
- Supports asynchronous rendering for improved performance
- Offers rich text features like highlighting and custom attributes
Cons of YYText
- More complex implementation due to its extensive feature set
- Steeper learning curve for developers
- Potentially higher memory usage for simple text view scenarios
Code Comparison
GrowingTextView:
let textView = GrowingTextView()
textView.maxHeight = 100
textView.minHeight = 30
textView.placeholder = "Enter text..."
YYText:
let label = YYLabel()
label.attributedText = NSAttributedString(string: "Hello, YYText!")
label.textVerticalAlignment = .top
label.numberOfLines = 0
label.textContainerInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
GrowingTextView focuses on providing a simple, auto-expanding text view, while YYText offers a more feature-rich text rendering and editing solution. GrowingTextView is easier to implement for basic text input scenarios, whereas YYText provides advanced capabilities at the cost of increased complexity. Developers should choose based on their specific requirements and the level of text manipulation needed in their projects.
A beautiful rich text WYSIWYG editor for iOS with a syntax highlighted source view
Pros of ZSSRichTextEditor
- Offers rich text editing capabilities with formatting options
- Includes a toolbar for easy access to formatting features
- Supports image insertion and manipulation within the editor
Cons of ZSSRichTextEditor
- More complex implementation due to additional features
- Larger codebase and potentially higher resource usage
- May require more maintenance and updates for compatibility
Code Comparison
ZSSRichTextEditor:
let richTextEditor = ZSSRichTextEditor()
richTextEditor.delegate = self
richTextEditor.setHTML("Initial content")
view.addSubview(richTextEditor)
GrowingTextView:
let growingTextView = GrowingTextView()
growingTextView.delegate = self
growingTextView.text = "Initial content"
view.addSubview(growingTextView)
Summary
ZSSRichTextEditor provides a feature-rich text editing experience with formatting options and image support, making it suitable for applications requiring advanced text manipulation. However, it comes with increased complexity and potential performance overhead.
GrowingTextView, on the other hand, focuses on providing a simple, auto-expanding text input field without additional formatting features. It's lightweight and easy to implement, making it ideal for basic text input scenarios where rich text formatting is not required.
The choice between the two depends on the specific needs of your application, balancing between feature set and simplicity.
Custom UITextFields effects inspired by Codrops, built using Swift
Pros of TextFieldEffects
- Offers a variety of pre-built text field effects, providing more design options out of the box
- Supports both Swift and Objective-C, making it more versatile for different projects
- Includes customizable animations for better user experience
Cons of TextFieldEffects
- Focuses on visual effects rather than dynamic sizing, which may not be suitable for all use cases
- May have a steeper learning curve due to the variety of effects and customization options
- Potentially higher overhead for simple text input needs
Code Comparison
GrowingTextView:
let textView = GrowingTextView()
textView.maxHeight = 100.0
textView.minHeight = 30.0
textView.delegate = self
TextFieldEffects:
let textField = HoshiTextField()
textField.placeholderColor = .gray
textField.borderActiveColor = .blue
textField.borderInactiveColor = .black
textField.placeholder = "Enter text"
GrowingTextView focuses on dynamic sizing of text views, allowing for automatic expansion as content grows. It's simpler to implement but limited in visual customization. TextFieldEffects, on the other hand, provides a range of visually appealing text field designs with animations, offering more aesthetic options but less focus on dynamic sizing. The choice between the two depends on whether the priority is content accommodation or visual appeal in the user interface.
RichEditorView is a simple, modular, drop-in UIView subclass for Rich Text Editing.
Pros of RichEditorView
- Offers rich text editing capabilities, including formatting options like bold, italic, and underline
- Supports inserting images and creating ordered/unordered lists
- Provides a customizable toolbar for easy access to formatting options
Cons of RichEditorView
- More complex implementation due to additional features
- Potentially higher memory usage and performance overhead
- May require more setup and configuration for basic text input scenarios
Code Comparison
GrowingTextView:
let textView = GrowingTextView()
textView.delegate = self
textView.maxHeight = 100
textView.minHeight = 30
textView.placeholder = "Enter text..."
RichEditorView:
let richEditorView = RichEditorView()
richEditorView.delegate = self
richEditorView.placeholder = "Enter text..."
richEditorView.inputAccessoryView = RichEditorToolbar(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 44))
richEditorView.setHTML("<p>Initial content</p>")
GrowingTextView focuses on providing a simple, auto-expanding text input solution, while RichEditorView offers a more feature-rich text editing experience with formatting options. GrowingTextView is easier to implement for basic text input needs, while RichEditorView is better suited for applications requiring advanced text editing capabilities.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
HPGrowingTextView
Multi-line/Autoresizing UITextView similar as in the SMS-app. The example project mimicks the look of Apple's SMS-app.
Properties
int maxNumberOfLines; // Stops growing at this amount of lines.
int minNumberOfLines; // Starts growing at this amount of lines.
int maxHeight; // Specify the maximum height in points instead of lines.
int minHeight; // Specify the minimum height in points instead of lines.
BOOL animateHeightChange; // Animate the growing
NSTimeInterval animationDuration; // Adjust the duration of the growth animation.
UITextView borrowed properties
NSString *text;
UIFont *font;
UIColor *textColor;
NSTextAlignment textAlignment;
NSRange selectedRange;
BOOL editable;
UIDataDetectorTypes dataDetectorTypes;
UIReturnKeyType returnKeyType;
If you want to set other UITextView properties, use .internalTextView
Delegate methods
-(BOOL)growingTextViewShouldBeginEditing:(HPGrowingTextView *)growingTextView;
-(BOOL)growingTextViewShouldEndEditing:(HPGrowingTextView *)growingTextView;
-(void)growingTextViewDidBeginEditing:(HPGrowingTextView *)growingTextView;
-(void)growingTextViewDidEndEditing:(HPGrowingTextView *)growingTextView;
-(BOOL)growingTextView:(HPGrowingTextView *)growingTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
-(void)growingTextViewDidChange:(HPGrowingTextView *)growingTextView;
// Called WITHIN animation block!
-(void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height;
// Called after animation
-(void)growingTextView:(HPGrowingTextView *)growingTextView didChangeHeight:(float)height;
-(void)growingTextViewDidChangeSelection:(HPGrowingTextView *)growingTextView;
-(BOOL)growingTextViewShouldReturn:(HPGrowingTextView *)growingTextView;
For more info, see blogpost: http://www.hanspinckaers.com/multi-line-uitextview-similar-to-sms
Top Related Projects
⛔️**DEPRECATED** ⛔️ A drop-in UIViewController subclass with a growing text input view and other useful messaging features
Powerful text framework for iOS to display and edit rich text.
A beautiful rich text WYSIWYG editor for iOS with a syntax highlighted source view
Custom UITextFields effects inspired by Codrops, built using Swift
RichEditorView is a simple, modular, drop-in UIView subclass for Rich Text Editing.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot