6

最近、XCode 5 を使用してアプリを iOS 7 に更新したところ、boundingRectWithSize が属性付き文字列の境界を計算する (サイズ部分で) 異なる高さを与えることがわかりました。

次の行では、iOS 6 と iOS 7 で結果が異なります。

CGRect rect = [self boundingRectWithSize:CGSizeMake(inWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];

「self」は NSAttributedString であり、「inWidth」は文字列が収まるピクセル単位の最大幅です。

iOS 7 は iOS 6 とは異なるフォント処理を行っているためだと思います。

両方のiOSバージョンで文字列の高さを計算するための実用的なソリューションを持っている人はいますか?

4

2 に答える 2

7

4.3 以上のすべての iOS で sizeWithAttributes を使用できないため、7.0 以前の iOS 用の条件付きコードを記述する必要があります。したがって、特定のソリューションを使用することをお勧めします

UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16];
gettingSizeLabel.text = @"YOUR TEXT HERE";
gettingSizeLabel.numberOfLines = 0;
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

このオプションは非常にうまく機能しており、条件付きコードなしですべての iOS でスムーズに動作します。

于 2014-04-29T05:36:27.487 に答える
1

私は同じ問題を抱えていました。私にとっては、高さの単純な ceil() が解決しました。また、属性付きの文字列に適切な属性を設定してください。

@{NSParagraphStyleAttributeName: paragraphStyle, NSFontAttributeName : label.font}
于 2013-09-27T09:39:48.503 に答える