NSAttributedString
2 つの異なるサイズの文字列を生成するために使用します。デフォルトでは、下の配置は次のようになります。
しかし、次のように垂直方向に中央揃えしたい:
明確にするために、これは単一の属性付き文字列であり、2 つ以上ではありません。これは私の質問を説明するための単純化された例です。実際にやりたいことはもっと複雑です。
NSAttributedString
2 つの異なるサイズの文字列を生成するために使用します。デフォルトでは、下の配置は次のようになります。
しかし、次のように垂直方向に中央揃えしたい:
明確にするために、これは単一の属性付き文字列であり、2 つ以上ではありません。これは私の質問を説明するための単純化された例です。実際にやりたいことはもっと複雑です。
NSBaselineOffsetAttributeName
問題のテキストの属性を操作するのが最も簡単だと思います。
NSBaselineOffsetAttributeName
この属性の値は、ベースラインからの文字のオフセットをポイント単位で示す浮動小数点値を含む NSNumber オブジェクトです。デフォルト値は 0 です。
中央に配置するには、大きいテキストの高さと小さいテキストの高さの差を半分にして、それをベースライン調整として使用します。
を使用して小さいテキストを垂直方向に揃える実際の例を次に示します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];