10

編集:リンクされた「重複」の質問は、テキストの長方形の計算のみを扱います。文字列サイズではなく、ラベルがスケーリングされた後に実際のフォントサイズを計算する必要があります。

このメソッドは非推奨になりました。

size = [self sizeWithFont:font // 20
              minFontSize:minFontSize // 14
           actualFontSize:&actualFontSize // 16
                 forWidth:maxWidth
            lineBreakMode:self.lineBreakMode];

テキストのサイズが収まるように縮小されたときに、iOS 7 で UILabel のフォントサイズを計算するにはどうすればよいですか?

4

8 に答える 8

11

私は同じ問題を抱えています.UIViewの他のUILabelsを一致させるには、実際のサイズを知る必要があります。

それが完璧な解決策ではないことはわかっていますが、おそらくあなたにとっては役に立ちます。

私の解決策は次のとおりです。使用する代わりにadjustsFontSizeToFitWidth、サイズを「手動で」計算します。

CGSize initialSize = [_label.text sizeWithAttributes:@{NSFontAttributeName:_label.font}];
while ( initialSize.width > _label.frame.size.width ) {
    [_label setFont:[_label.font fontWithSize:_label.font.pointSize - 1]];
    initialSize = [_label.text sizeWithAttributes:@{NSFontAttributeName:_label.font}];
}
CGFloat actualSize = _label.font.pointSize;
于 2013-11-08T10:56:35.083 に答える
8

の使用は、iOS 6 ではminFontSize廃止され、 iOS 7 では描画の追加で廃止されました。それを使用して実際に使用されているフォント サイズを見つけたい場合は、質問で言及した非推奨の方法を使用する必要があります。UILabelNSString

の置き換えはminFontSizeですminimumScaleFactor。使用されている実際の倍率を知りたい場合は、次のように を作成してメッセージにNSStringDrawingContext渡す必要があります。boundingRectWithSize:options:attributes:context:

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
context.minimumScaleFactor = 0.7;
[label.text boundingRectWithSize:CGSizeMake(maxWidth, HUGE_VAL)
    options:NSStringDrawingUsesLineFragmentOrigin
    attributes:@{
        NSFontAttributeName: font
    } context:context];
CGFloat actualFontSize = font.pointSize * context.actualScaleFactor;
于 2013-10-05T17:00:26.180 に答える
0

1 行の UILabel のシンプルなソリューション:

//myLabel - initial label

UILabel *fullSizeLabel = [UILabel new];
fullSizeLabel.font = myLabel.font;
fullSizeLabel.text = myLabel.text;
[fullSizeLabel sizeToFit];

CGFloat actualFontSize = myLabel.font.pointSize * (myLabel.bounds.size.width / fullSizeLabel.bounds.size.width);

//correct, if new font size bigger than initial
actualFontSize = actualFontSize < myLabel.font.pointSize ? actualFontSize : myLabel.font.pointSize;
于 2016-11-12T01:14:21.410 に答える
-1

Erik van der Neut のコードがうまくいったので、Swift に翻訳し、UILabel 拡張機能でラップしました。

extension UILabel {

    public func actualFontSize()-> CGFloat {
        let context = NSStringDrawingContext()
        context.minimumScaleFactor = self.minimumScaleFactor

        let attributedString = NSAttributedString(string: self.text ?? "", attributes: [NSFontAttributeName: self.font])
        attributedString.boundingRectWithSize(self.frame.size, options: [.UsesLineFragmentOrigin], context: context)

        return (self.font.pointSize * context.actualScaleFactor)
    }
}
于 2016-01-28T18:59:49.060 に答える