1. ホーム
  2. objective-c

[解決済み] sizeWithFontメソッドは非推奨です。 boundingRectWithSizeは予期しない値を返します。

2023-07-02 08:50:30

質問

iOS7では sizeWithFont は非推奨なので、私は boundingRectWithSize (これは CGRect の値を返します) を使っています。私のコード

 UIFont *fontText = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16];
                    // you can use your font.

 CGSize maximumLabelSize = CGSizeMake(310, 9999);

 CGRect textRect = [myString boundingRectWithSize:maximumLabelSize   
                             options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{NSFontAttributeName:fontText}
                             context:nil];

 expectedLabelSize = CGSizeMake(textRect.size.width, textRect.size.height);

textRect よりも大きいサイズを取得します。 maximumLabelSize を使用したときとは異なるサイズになります。 sizeWithFont . どうすればこの問題を解決できますか?

どのように解決するのですか?

新しいラベルを作成し sizeThatFit:(CGSize)size ??

UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:@"YOUR FONT's NAME" size:16];
gettingSizeLabel.text = @"YOUR LABEL's TEXT";
gettingSizeLabel.numberOfLines = 0;
gettingSizeLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize maximumLabelSize = CGSizeMake(310, CGFLOAT_MAX);

CGSize expectSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

編集:この上のコードはios7以上では使えないので、下記をご利用ください。

CGRect textRect = [myString boundingRectWithSize:maximumLabelSize   
                         options:NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingUsesFontLeading
                         attributes:@{NSFontAttributeName:fontText}
                         context:nil];