iOS 9 - UITextView 缩小字体大小以在不滚动的情况下填充文本视图?
iOS 9 - UITextView shrink font size to fill text view without scrolling?
我有一个 UITextView,其中包含的文本可能从几个字到很多字不等。
在使用该应用程序时,文本视图具有固定高度并启用滚动功能,因此用户可以查看任何可能很长的文本。
但是,允许用户"share" 使用本机共享功能来显示屏幕。在此过程中,我截取屏幕截图以用于图像,以及一些其他添加的 UI 元素。由于无法滚动屏幕截图,我禁用了 UITextView 的滚动功能并尝试缩小任何长文本的字体,同时增加任何小文本的字体,以便 UITextView 被填充尽可能的好。
这用于旧版本的 iOS,但 iOS 9 似乎有一些问题,现在它删除了一些文本:
附带说明一下,此视图是在 XIB 文件中构建的并使用自动布局。
override func awakeFromNib() {
super.awakeFromNib()
self.translatesAutoresizingMaskIntoConstraints = false
if UIDevice.iPad() || UIDevice.iPadPro() {
bobbleheadViewWidthConstraint.constant = 300.0
bobbleheadViewHeightConstraint.constant = 600.0
self.updateConstraintsIfNeeded()
self.layoutIfNeeded()
}
speechBubbleView.roundCornersWithRadius(5.0)
}
class func shareViewForQuote(quote: Quote) -> BTVShareView? {
if let shareView = UINib(nibName: "BTVShareView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as? BTVShareView {
shareView.bobbleheadView.image = UIImage(named: quote.character!.name!.stringByReplacingOccurrencesOfString(" ", withString: "-"))
shareView.textView.text = quote.text
shareView.textView.font = UIFont.systemFontOfSize(60.0)
// Re-size quote text
shareView.updateTextFont()
return shareView
}
return nil
}
func updateTextFont() {
let minFontSize: CGFloat = 1.0
var currentFontSize: CGFloat = 100.0
while (currentFontSize > minFontSize && textView.sizeThatFits(CGSizeMake(textView.frame.size.width, textView.frame.size.height)).height >= textView.frame.size.height) {
currentFontSize -= 1.0
textView.font = textView.font!.fontWithSize(currentFontSize)
}
}
所以更好的解决方案是只对共享屏幕使用 UILabel,因为我不需要 UITextView。
仍然好奇调整字体大小以使文本适合 UITextView 的正确方法是什么...
我有一个 UITextView,其中包含的文本可能从几个字到很多字不等。 在使用该应用程序时,文本视图具有固定高度并启用滚动功能,因此用户可以查看任何可能很长的文本。
但是,允许用户"share" 使用本机共享功能来显示屏幕。在此过程中,我截取屏幕截图以用于图像,以及一些其他添加的 UI 元素。由于无法滚动屏幕截图,我禁用了 UITextView 的滚动功能并尝试缩小任何长文本的字体,同时增加任何小文本的字体,以便 UITextView 被填充尽可能的好。
这用于旧版本的 iOS,但 iOS 9 似乎有一些问题,现在它删除了一些文本:
附带说明一下,此视图是在 XIB 文件中构建的并使用自动布局。
override func awakeFromNib() {
super.awakeFromNib()
self.translatesAutoresizingMaskIntoConstraints = false
if UIDevice.iPad() || UIDevice.iPadPro() {
bobbleheadViewWidthConstraint.constant = 300.0
bobbleheadViewHeightConstraint.constant = 600.0
self.updateConstraintsIfNeeded()
self.layoutIfNeeded()
}
speechBubbleView.roundCornersWithRadius(5.0)
}
class func shareViewForQuote(quote: Quote) -> BTVShareView? {
if let shareView = UINib(nibName: "BTVShareView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as? BTVShareView {
shareView.bobbleheadView.image = UIImage(named: quote.character!.name!.stringByReplacingOccurrencesOfString(" ", withString: "-"))
shareView.textView.text = quote.text
shareView.textView.font = UIFont.systemFontOfSize(60.0)
// Re-size quote text
shareView.updateTextFont()
return shareView
}
return nil
}
func updateTextFont() {
let minFontSize: CGFloat = 1.0
var currentFontSize: CGFloat = 100.0
while (currentFontSize > minFontSize && textView.sizeThatFits(CGSizeMake(textView.frame.size.width, textView.frame.size.height)).height >= textView.frame.size.height) {
currentFontSize -= 1.0
textView.font = textView.font!.fontWithSize(currentFontSize)
}
}
所以更好的解决方案是只对共享屏幕使用 UILabel,因为我不需要 UITextView。
仍然好奇调整字体大小以使文本适合 UITextView 的正确方法是什么...