62

NSAttributedString2 つの異なるサイズの文字列を生成するために使用します。デフォルトでは、下の配置は次のようになります。

ベースラインに合わせたサイズ

しかし、次のように垂直方向に中央揃えしたい: 縦中央サイズ

明確にするために、これは単一の属性付き文字列であり、2 つ以上ではありません。これは私の質問を説明するための単純化された例です。実際にやりたいことはもっと複雑です。

4

4 に答える 4

96

NSBaselineOffsetAttributeName問題のテキストの属性を操作するのが最も簡単だと思います。

NSBaselineOffsetAttributeName

この属性の値は、ベースラインからの文字のオフセットをポイント単位で示す浮動小数点値を含む NSNumber オブジェクトです。デフォルト値は 0 です。

中央に配置するには、大きいテキストの高さと小さいテキストの高さの差を半分にして、それをベースライン調整として使用します。

于 2013-11-05T01:47:27.450 に答える
23

を使用して小さいテキストを垂直方向に揃える実際の例を次に示しますNSBaselineOffsetAttributeName

NSString *bigString   = @"BIG";
NSString *smallString = @"Small String";
NSString *fullString = [NSString stringWithFormat:@"%@ %@", bigString, smallString];

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:fullString];

NSRange bigStringRange = NSMakeRange(0, bigString.length);
NSRange smallStringRange = NSMakeRange(bigStringRange.length, smallString.length);

[string beginEditing];


//Set big string font and size
[string addAttribute:NSFontAttributeName
               value:[UIFont systemFontOfSize:28.0]
               range:bigStringRange];

//set small string font and size
[string addAttribute:NSFontAttributeName
               value:[UIFont systemFontOfSize:18.0]
               range:smallStringRange];

//Set small string baseline offset
[string addAttribute:NSBaselineOffsetAttributeName
               value:[NSNumber numberWithFloat:3.0]  //adjust this number till text appears to be centered
               range:smallStringRange];

[string endEditing];
于 2014-10-25T10:44:05.860 に答える