How to align text inside textView vertically?
Link your Text View to your View Controller and name it as you want (let's say textView
).
In viewDidLayoutSubviews
function put this line:
textView.centerVertically()
Then under the last curly bracket of your class put this extension:
extension UITextView { func centerVertically() { let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude) let size = sizeThatFits(fittingSize) let topOffset = (bounds.size.height - size.height * zoomScale) / 2 let positiveTopOffset = max(1, topOffset) contentOffset.y = -positiveTopOffset } }
To use this function in Swift 2.0
just change CGFloat.greatestFiniteMagnitude
to CGFloat.max
Swift 5
Put the following extension below your last curly bracket in your ViewController:
// MARK: - UITextView extensionextension UITextView { func centerVerticalText() { self.textAlignment = .center let fitSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude) let size = sizeThatFits(fitSize) let calculate = (bounds.size.height - size.height * zoomScale) / 2 let offset = max(1, calculate) contentOffset.y = -offset }}
Call this function after you set the text.
yourTextView.centerVerticalText()
If you want to do this using the storyboard, you could add a view inside of your textView. Then, set the constraints that you used for the textView to the new view. Finally, add the following constraints to your text view: