 <p>Another solution is to animate the bounds change.</p> <p>There are a few ways, but here's a simple subclass of <code>UITextView</code> which does exactly this.</p> <pre><code>import Foundation import UIKit import QuartzCore class SmoothTextView : UITextView { override func actionForLayer(layer: CALayer!, forKey key: String!) -&gt; CAAction! { if key == "bounds" { let x = super.actionForLayer(layer, forKey: "backgroundColor") if let action:CAAnimation = x as? CAAnimation { let transition = CATransition() transition.type = kCATransitionFade transition.beginTime = action.beginTime transition.duration = action.duration transition.speed = action.speed transition.timeOffset = action.timeOffset transition.repeatCount = action.repeatCount transition.repeatDuration = action.repeatDuration transition.autoreverses = action.autoreverses transition.fillMode = action.fillMode transition.timingFunction = action.timingFunction transition.delegate = action.delegate return transition } } return super.actionForLayer(layer, forKey: key) } } </code></pre> <p>This as of iOS 8.</p> <p>As an extra tweak, you might want to configure the text of your text view instance by adjusting the text container by zeroing all padding or insets:</p> <pre><code>textView.textContainer.lineFragmentPadding = 0.0 textView.textContainerInset = UIEdgeInsetsZero </code></pre>