我想垂直对齐我的UITextView中的文本(所以它将在它的中间)。 我怎样才能实现这一目标? 我抬起头,找不到任何可以帮助我的答案。
提前致谢。
答案 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)
将以下扩展名放在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的约束设置为新视图。最后,在文本视图中添加以下约束:
答案 4 :(得分:0)
以上答案是正确的,只想为实时/ onEditing上更新textView的用户添加解决方案。
使用以上扩展名,并添加委托方法。
func textViewDidChange(_ textView: UITextView) {
textView.centerVertically()
}
答案 5 :(得分:-1)
在viewDidLoad()
内部:
textView.textAlignment = .center
答案 6 :(得分:-1)
这用于使文本水平居中。