这是一个很大的问题,因为感觉到现在这将成为内置UIKit
功能或相关框架的一部分。这是一个很好的视觉问题示例:
解决这个问题没有简单的方法,但是绝对有可能。一种方法是以编程方式尝试使用不同的字体大小,直到找到与视图边界相当接近的字体大小为止。您可以使用或boundingRect()
功能来完成此操作。例如:NSString
NSAttributedString
let string = "This is a test"
let infiniteSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height:CGFloat.greatestFiniteMagnitude)
let size = string.boundingRect(with: infiniteSize, options: [], attributes: [.font: UIFont.systemFont(ofSize: avgSize)] context: nil).size
您可以执行二进制搜索,比完整的暴力破解方法更有效。如果您正在寻找真正强大的功能,那么还有一些需要更多考虑的因素,包括正确的自动换行和iOS字体缓存性能。
如果您只想以简单的方式在屏幕上显示文本,那么我已经在Swift中开发了一个健壮的实现,我还在生产应用程序中使用了它。它是一个UIView
子类,可对任何输入文本(包括多行)进行高效,自动的字体缩放。要使用它,您只需执行以下操作:
let view = AKTextView()
// Use a simple or fancy NSAttributedString
view.attributedText = .init(string: "Some text here")
// Add to the view hierarchy somewhere
而已!您可以在此处找到完整的源代码:https : //github.com/FlickType/AccessibilityKit
希望这可以帮助!