62

重複の可能性:
固定幅で NSAttributedString の高さを取得する方法

iOS 6 で NSAttributedString が利用できるようになりました。レイアウトの目的で、固定幅で NSAttributedString の必要な高さを計算する方法を知りたいです。NSString と同等のものを探しています- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)sizeが、NSAttributedString 用です。

NSAttributedStrings の描画サイズを計算するには、次の 2 つの方法を使用できます。

  1. - (CGSize)size幅を考慮していないため使用できません。
  2. を試し- (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]];

    CGRect フレーム = [attributedString boundingRectWithSize:CGSizeMake(200, 1000) オプション:0 コンテキスト:nil];
    NSLog(@"境界サイズ: %f, %f", frame.size.width, frame.size.height);

Mac OS X で使用できる方法は他にもありますが、iOS では使用できません。

4

1 に答える 1

175

オプション 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と、間違った高さが得られます。

attrStrfont 属性を含むことも必要です。フォントがないと、サイズを正しく計算する方法がありません。

于 2013-01-19T00:59:43.870 に答える