A missing placeholder for UITextView
PlaceholderUITextView
PlaceholderUITextView is a simple subclass from UITextView with multiple line placeholder.
Requirements
- Xcode 10 or later
- iOS 10.0 or later
- Swift 4.2 or later
Getting Started
CocoaPods
Install with CocoaPods by adding the following to your Podfile
:
platform :ios, '10.0'
use_frameworks!
pod 'PlaceholderUITextView'
Swift Package Manager
Install with Swift Package Manager by adding the following to your Package.swift
:
dependencies: [
.package(url: "https://github.com/hoangtaiki/PlaceholderUITextView", from: "1.0.0"),
],
Submodules
Or manually checkout the submodule with git submodule add git@github.com:hoangtaiki/Refreshable.git
, drag Refreshable.xcodeproj to your project, and add Refreshable as a build dependency.
Usage
You can set the value of the placeholder
property just like using UITextField.
Interface Builder
- Drag a UITextView object onto the canvas.
- In the Identity inspector, set the Custom Class name to
PlaceholderUITextView
. - In the Attributes inspector, you can change the value of the
placeholder
property directly.
Code
let placeholderTextView = PlaceholderUITextView(frame: view.bounds)
placeholderTextView.placeholder = "What's on your mind?"
view.addSubview(placeholderTextView)
Example
To run the example project, clone the repo, and run pod install
from the Example directory first.
Some notes
If you run Example project you can see UITextView have some gap from four edges (top, right, bottom, left).
This gap is not a feature of PlaceholderUITextView. It is the default features of UITextView.
They are: textContainerInset
and lineFragmentPadding
.
Defaut UITextView has textContainerInset = UIEdgeInsets(top: 8, left: 0, bottom: 8, right: 0)
and lineFragmentPadding = 5
. So that if you run Example Project you can see that: UITextField always be moved a bit by these two default values.
To avoid this happening you have two ways:
- Set
textContainerInset by .zero
andlineFragmentPadding by 0
- Change constraint between UITextView and superview.