我已经实现了以下类来将我的文本集中在我的UITextView
。
class VerticallyCenteredTextView: UITextView {
override var contentSize: CGSize {
didSet {
var topCorrection = (bounds.size.height - contentSize.height * zoomScale) / 2.0
topCorrection = max(0, topCorrection)
contentInset = UIEdgeInsets(top: topCorrection, left: 0, bottom: 0, right: 0)
}
}
}
我还实现了以下方法,根据UITextView
中的空间量调整字体大小:
func updateTextFont(textView : UITextView, minSize : CGFloat, maxSize : CGFloat) {
if (textView.text.isEmpty || CGSizeEqualToSize(textView.bounds.size, CGSizeZero)) {
return;
}
let textViewSize = textView.frame.size;
let fixedWidth = textViewSize.width;
let expectSize = textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT)));
var expectFont = textView.font;
if (expectSize.height > textViewSize.height) {
while (textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT))).height > textViewSize.height && (textView.font!.pointSize > CGFloat(minSize))) {
expectFont = textView.font!.fontWithSize(textView.font!.pointSize - 1)
textView.font = expectFont
}
}
else {
while (textView.sizeThatFits(CGSizeMake(fixedWidth, CGFloat(MAXFLOAT))).height < textViewSize.height && (textView.font!.pointSize < CGFloat(maxSize))) {
expectFont = textView.font;
textView.font = textView.font!.fontWithSize(textView.font!.pointSize + 1)
}
textView.font = expectFont;
}
}
现在这个方法适用于普通UITextView
,但是由于VerticallyCenteredTextView
初始化时应用的边缘插入,它对我的VerticallyCenteredTextView
完全不起作用,在可以调用updateTextFont
函数之前。有没有办法我可以将这两个代码段组合起来,以获得UITextView
根据可用空间量调整文本字体并将文本垂直居中UITextView
?