如何垂直对齐textView中的文本?

时间:2016-12-29 21:38:22

标签: ios swift textview swift3

我想垂直对齐我的UITextView中的文本(所以它将在它的中间)。 我怎样才能实现这一目标? 我抬起头,找不到任何可以帮助我的答案。

提前致谢。

7 个答案:

答案 0 :(得分:30)

将您的textview链接到您的viewcontroller并根据需要命名(让我们说textView)。

viewDidLayoutSubviews函数中输入以下行:

textView.centerVertically()

然后在你班级的最后一个花括号下面加上这个扩展名:

  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
    }

}

要将此功能用于 swift2 ,只需将CGFloat.greatestFiniteMagnitude更改为CGFloat.max

答案 1 :(得分:1)

雨燕5

将以下扩展名放在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
    }
}

在设置文本后调用此功能。

yourTextView.centerVerticalText()

答案 2 :(得分:1)

将此添加到您的扩展或 UITextView 的扩展类

public func centerVertically()
{
    let iFont = font == nil ? UIFont.systemFont(ofSize: UIFont.systemFontSize) : font!
    textContainerInset.top = (frame.height - iFont.lineHeight) / 2
}

答案 3 :(得分:0)

如果要使用情节提要板执行此操作,则可以在textView中添加一个视图。然后,将用于textView的约束设置为新视图。最后,在文本视图中添加以下约束:

  • (左右)O并指向新视图
  • 使用对齐约束,添加垂直约束。

    enter image description here

答案 4 :(得分:0)

以上答案是正确的,只想为实时/ onEditing上更新textView的用户添加解决方案。

使用以上扩展名,并添加委托方法。

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

答案 5 :(得分:-1)

快速5(不带扩展名)

viewDidLoad()内部:

textView.textAlignment = .center

答案 6 :(得分:-1)

这用于使文本水平居中。