それは組み込みUIKit
機能や関連フレームワークの一部になっているように思えるので、すばらしい質問です。質問の視覚的な例を次に示します。
それを回避する簡単な方法はありませんが、それは間違いなく可能です。これを行う1つの方法は、ビューの境界に適度に合うフォントが見つかるまで、プログラムでさまざまなフォントサイズを試すことです。またはの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
お役に立てれば!