我希望能够垂直对齐UITextView中的文本(使其位于中间)。 我该如何实现呢? 我查找了一些资料,但没有找到任何可以帮助我的答案。
提前致谢。
将您的Text View与View Controller连接,并按您想要的名称命名(假设我们称其为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
}
}
要在 Swift 2.0
中使用此函数,只需将 CGFloat.greatestFiniteMagnitude
更改为 CGFloat.max
。
extension UITextView {
func centerVerticalText() {
var topCorrect = (self.bounds.size.height - self.contentSize.height * self.zoomScale) / 2
topCorrect = topCorrect < 0.0 ? 0.0 : topCorrect
self.contentInset.top = topCorrect
}
}
编辑:建议在layoutSubviews()
中调用。
将以下extension放置在您的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()
public func centerVertically()
{
let iFont = font == nil ? UIFont.systemFont(ofSize: UIFont.systemFontSize) : font!
textContainerInset.top = (frame.height - iFont.lineHeight) / 2
}
textContainerInset 对我而言比 contentOffset 更有效。
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)
textContainerInset.top = positiveTopOffset
}
}
这用于将文本水平居中。