化学式(H2O、Na ^ 2 +など)の添え字を作成する必要がありますか?
これはNSAttributedStringで行うことができますか、それとも添え字を作成するための代替/より簡単な方法がありますか?
化学式(H2O、Na ^ 2 +など)の添え字を作成する必要がありますか?
これはNSAttributedStringで行うことができますか、それとも添え字を作成するための代替/より簡単な方法がありますか?
これが私が iOS 6 で行ったことです。まず、CoreText と QuartzCore フレームワークを追加します。次にインポートします。
#import <QuartzCore/QuartzCore.h>
#import <CoreText/CTStringAttributes.h>
#import <CoreText/CoreText.h>
プレーンな NSString を入力し、最後の文字が上付き文字の NSMutableAttributedString をエクスポートする小さな関数を作成しました。これは、上付き文字または下付き文字を設定できるように変更できます。kCTSuperscriptAttributeName の値を -1 に変更します。また、変数を追加して、文字列内で上付き文字を配置する場所を指定することもできます。現時点では、文字列の末尾を想定しています。
- (NSMutableAttributedString *)plainStringToAttributedUnits:(NSString *)string;
{
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string];
UIFont *font = [UIFont systemFontOfSize:10.0f];
UIFont *smallFont = [UIFont systemFontOfSize:9.0f];
[attString beginEditing];
[attString addAttribute:NSFontAttributeName value:(font) range:NSMakeRange(0, string.length - 2)];
[attString addAttribute:NSFontAttributeName value:(smallFont) range:NSMakeRange(string.length - 1, 1)];
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:NSMakeRange(string.length - 1, 1)];
[attString addAttribute:(NSString*)kCTForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, string.length - 1)];
[attString endEditing];
return attString;
}
これを使用したい場合は、次のようにして UITextField に配置できます。
NSString *qlwUnitsPlainText = @"m3";
self.quantityLoadWeightUnits_textField.attributedText = [self plainStringToAttributedUnits:qlwUnitsPlainText];
これが他の誰かに役立つことを願っています。そこには多くの例がありません!
これは で行うことができますNSAttributedString
。探している属性定数は、プラットフォームによって異なります。Mac OS X では でNSSuperscriptAttributeName
あり、iOS では ですkCTSuperscriptAttributeName
。下付き文字に負の値を渡します。
唯一の注意点は、UILabel
iOS では s を描画できないことですNSAttributedString
(ただし、iOS 6 では問題ありません)。Core Text を使用してテキストを描画するかUILabel
、NSAttributedString
.
iOS では、kCTSuperscriptAttributeName 定数を見逃していましたが、フォント サイズと「ベースライン」で良好な結果が得られました。これにより、あまり従順でないフォントについても、もう少し制御できます。
+ (NSAttributedString *)attributedStringForText:(NSString *)normalText andSuperscript:(NSString *)superscriptText textSize:(CGFloat)textSize
{
UIFont *normalFont = [Styles mainFontWithSize:textSize];
UIFont *superFont = [Styles mainFontWithSize:textSize / 2];
NSMutableAttributedString *finalStr = [[NSMutableAttributedString alloc] initWithString:normalText attributes:@{NSFontAttributeName: normalFont}];
NSAttributedString *superStr = [[NSAttributedString alloc] initWithString:superscriptText attributes:@{NSFontAttributeName: superFont, NSBaselineOffsetAttributeName:@(textSize/2)}];
[finalStr appendAttributedString:superStr];
return finalStr;
}
SubScript の場合、kCTSuperscriptAttributeName の値を @-1 として使用します。
ドキュメントによると
@discussion 値は CFNumberRef でなければなりません。デフォルトは int 値 0 です。指定されたフォントでサポートされている場合、値 1 は上付き文字を有効にし、値 -1 は下付き文字を有効にします。
extern const CFStringRef kCTSuperscriptAttributeName CT_AVAILABLE(10_5, 3_2);
Example- [lblHeader setText:@“Headers [Alpha1 – text”];
NSMutableAttributedString *headerSubscript = [[NSMutableAttributedString alloc]initWithAttributedString: lblHeader.attributedText];
[headerSubscript addAttribute:(NSString *)kCTSuperscriptAttributeName value:@-1 range:NSMakeRange(14,1)];
[lblHeader setAttributedText:headerSubscript];