必要な最小サイズを見つけるには、ラベルを反復処理する必要があります。私はちょうど、表示する必要のあるフォントの最小サイズを見つけるために、同じラベルに文字列の配列を繰り返し処理しています。このコード
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 10))
let textArray = ["asdasdas","asdsd","asdas"]
let size : CGFloat = 14
var minimumSize = size
for string in textArray{
var i : CGFloat = 0
while size-i>0 {
let font = UIFont.systemFont(ofSize: size-i)
let preferredSize = label.preferredLabelSize(maximumFrameBounds: view.frame, font: font, text: string)
if label.frame.size.width>=preferredSize.width{
minimumSize = min(size-i, minimumSize)
print(minimumSize)
break
}
i += 1
}
print(minimumSize)
}
を確認してください。これが完全に機能するかどうかはわかりませんが、これは正しい方向を指します。文字列の配列を繰り返し処理するのではなく、最小のフォントサイズを見つけるために、テキストでラベルを繰り返し処理する必要があります。配列内のラベルまたは文字列の幅を変更して、目的のとおりに動作するかどうかを調べることができます。また、フォントサイズを手動で計算するのではなく、自動レイアウトを使用してOSがそのサイズを処理できるようにすることをお勧めします。
サブビューをループすることができますか?UILabelsのみをチェックしてフォントサイズを引き出してから、もう一度ループして、各ラベルを必要なフォントサイズに設定しますか? – dfd
手動で計算する必要があるかもしれません。私はちょうど私の提案のテストを設定し、フィットするように調整されたフォントサイズがUILabel.font.pointSize値に反映されないように見えます。彼らはすべて17に戻ってきた: -/ – dfd
@dfd私はそうだと思います。縮んだ後に表示されるフォントサイズは、ラベルのフォントに格納されているフォントサイズとは関係ありません。セルがテキストをレイアウトする前に最終的なサイズを計算する方法を知っていますか?これは私の問題を解決するだろう。 – BallpointBen