How to align text inside textView vertically?

后端 未结 6 1250
天命终不由人
天命终不由人 2020-12-15 04:35

I want to align vertically the text inside my UITextView (so it will be in the middle of it). How can i achieve that? I looked up and could not find any answer that could h

相关标签:
6条回答
  • Swift 5 w/ no extensions

    inside viewDidLoad():

    textView.textAlignment = .center
    
    0 讨论(0)
  • 2020-12-15 05:13

    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:

    • (right and left) O and point to the new view
    • using the alignment constraints, add a vertically constraint.

    0 讨论(0)
  • 2020-12-15 05:14

    This is used to center the text horizontal.

    0 讨论(0)
  • 2020-12-15 05:22

    Link your textview to your viewcontroller 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 for swift2 just change CGFloat.greatestFiniteMagnitude to CGFloat.max

    0 讨论(0)
  • 2020-12-15 05:23

    Swift 5

    Put the following extension below your last curly bracket in your ViewController:

    // MARK: - UITextView extension
    extension 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()
    
    0 讨论(0)
  • 2020-12-15 05:25

    The above answer is correct, just want to add solution for those updating the textView on real time/onEditing.

    Use the above extension and add the delegate method as well.

    func textViewDidChange(_ textView: UITextView) { textView.centerVertically() }

    0 讨论(0)
提交回复
热议问题