可能性のある複製:
固定幅でNSAttributedStringの高さを取得する方法
NSAttributedStringがiOS 6で利用できるようになりました。レイアウトの目的で、固定幅の下でNSAttributedStringの必要な高さを計算する方法を知りたいです。 NSStringの- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
と同等の機能を探していますが、NSAttributedStringを探しています。
NSAttributedStringsの描画サイズを計算するには、2つの方法があります。
- (CGSize)size
は、幅を考慮しないため使用できません。- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context
を試しましたが、どういうわけか正しい高さが得られません。この方法にはバグがあると思います。次のコードを実行すると、bounding size: 572.324951, 19.000000
与えられた幅200を無視します。高さ100のようなものを与えるはずです。NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] init]; NSDictionary * attributes = @ {NSFontAttributeName:[UIFont fontWithName:@ "HelveticaNeue" size:15]、NSForegroundColorAttributeName:[UIColor blueColor]} ; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@ "Attributed String\n" attributes:attributes]]; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@ "Attributed String\n "attributes:attributes]]; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@" Attributed String\n "attributes:attributes]]; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@ "Attributed String\n" attributes:attributes]]; [attributedString appendAttributedString:[[NSAttributedString alloc] initWithString:@ "Attributed String\n" attributes:attributes]]; C GRect frame = [attributedString boundingRectWithSize:CGSizeMake(200、1000)options:0 context:nil]; NSLog(@ "bounding size:%f、%f"、frame.size.width、frame.size。高さ);
Mac OS Xで利用できる他の方法がありますが、iOSでは利用できません。
オプション2は、適切なパラメーターを使用してiOSで機能します。
NSAttributedString *attrStr = ... // your attributed string
CGFloat width = 300; // whatever your desired width is
CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil];
options
パラメーターの適切な値がないと、間違った高さになります。
attrStr
にはフォント属性が含まれていることも必要です。フォントがなければ、サイズを適切に計算する方法はありません。