web-dev-qa-db-ja.com

「®」登録記号の上付き文字を表示するにはどうすればよいですか?

登録記号を上付き文字として表示することに関して問題があります。 Unicode値\ u00AEを使用しましたが、同じ行に表示されます。残りのテキストの少し上に置きたいです。グーグルを実行しましたが、Unicodeのサイトに記載されているA〜Z、0〜9文字の上付き文字が見つかりました。

サンプルコード:

UILabel *myLabel; //do initialize stuff here

myLabel.text = @"My company\u00AE";

ありがとう

13
illuminatus

Unicodeには上付き文字形式のregistered記号がないため、HTMLコントロールを使用して、上付き文字タグに含めるしかありません。<sup>&reg;</sup>

http://rishida.net/scripts/uniview/ で確認できます。

22
sorin

IOS6以降、実際にはUILabelでNSAttributedStringを使用できます。

登録商標記号の上付き文字を設定するには、次のカテゴリを使用できます。

#import <CoreText/CTStringAttributes.h>
#import "UILabel+ SetSuperScriptForRegisteredTrademarkSymbol.h"

@implementation UILabel (SetSuperScriptForRegisteredTrademarkSymbol)

- (void) setSuperScriptForRegisteredTrademarkSymbol {

    NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:self.text];

    NSUInteger count = 0, length = [mutableAttributedString length];
    NSRange range = NSMakeRange(0, length);

    while(range.location != NSNotFound)
    {
        range = [[mutableAttributedString string] rangeOfString:@"®" options:0 range:range];
        if(range.location != NSNotFound) {
            [mutableAttributedString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:range];
            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
            count++;
        }
    }

    self.attributedText = mutableAttributedString;
}

@end
8

新規参入者向けに、これは比較的柔軟なSwift 4ソリューションであり、Integrating Stuffの元の回答に触発されています。私はそれをNSAttributedStringの拡張として作成しました。これは最もクリーンなソリューションのようです。私の考えでは、(R)記号の上付き文字を付けるには、呼び出し元の場所からこのメソッドに文字列「®」を渡すだけです。

extension NSAttributedString {

    class func superscriptInstances(ofString stringToReplace: String, withOriginalFont originalFont: UIFont, fromString string: String) -> NSAttributedString {
        let attributedString = NSMutableAttributedString(string: string)
        let length = attributedString.length
        let fontName = originalFont.fontName
        let fontSize = originalFont.pointSize
        let newSize = fontSize / 1.5
        let baselineOffset = fontSize / 3.0
        let newFont = UIFont(name: fontName, size: newSize)!
        var range = NSMakeRange(0, length)
        while (range.location != NSNotFound) {
            let nsstring = attributedString.string as NSString
            range = nsstring.range(of: stringToReplace, options: NSString.CompareOptions(rawValue: 0), range: range)
            if(range.location != NSNotFound) {
                attributedString.addAttributes([.font: newFont,.baselineOffset: baselineOffset], range: range)
                range = NSMakeRange(range.location + range.length, length - (range.location + range.length))
            }
        }
        return attributedString
    }

}
1
Brian Sachetta

使いやすいSwiftソリューションの場合、チェックアウトすることをお勧めしますHandyUIKit。にインポートした後プロジェクト(Carthage経由など– READMEの手順を参照)では、次のようなことができます。

_import HandyUIKit

"My company^{®}".superscripted(font: UIFont.systemFont(ofSize: 20, weight: .medium))
_

この行はNSAttributedStringを返します。これは、探しているものとまったく同じようになります。ただそれを割り当てるUILabels attributedTextプロパティとそれだけです!


subscriptingテキストを探している場合は、代わりにsubscripted(font:)を使用してください。 _CO_{2}_のような構造を認識します。 bothを組み合わせたい場合はsuperAndSubscripted(font:)もあります。

詳細および追加の例については、 docs を参照してください。

1
Jeehut
<div style="font-size:96px;">
Registered<span style="vertical-align:2.7em; font-size:0.2em;">&reg;</span>
</div>

フォントとポイントサイズに応じて、数値を微調整する必要があります。

0
unidentified-1

シンボルのフォントサイズを(今のところハードコードされた値に)縮小することにより、「IntegratingStuff」の回答に追加されました。


.h:

#import <UIKit/UIKit.h>

@interface UILabel (SetSuperScriptForRegisteredTrademarkSymbol) {

}


-(void)setSuperScriptForRegisteredTrademarkSymbol;


@end

.m:

#import "UILabel+SetSuperScriptForRegisteredTrademarkSymbol.h"
#import <CoreText/CTStringAttributes.h>


@implementation UILabel (SetSuperScriptForRegisteredTrademarkSymbol)


-(void)setSuperScriptForRegisteredTrademarkSymbol
{
    NSMutableAttributedString *mutableAttributedString = [[NSMutableAttributedString alloc] initWithString:self.text];

    NSUInteger count = 0, length = [mutableAttributedString length];
    NSRange range = NSMakeRange(0, length);

    while(range.location != NSNotFound)
    {
        range = [[mutableAttributedString string] rangeOfString:@"®" options:0 range:range];
        if(range.location != NSNotFound)
        {
            [mutableAttributedString addAttribute: (NSString *)kCTSuperscriptAttributeName
                                            value: @"1"
                                            range: range];

            [mutableAttributedString addAttribute: NSFontAttributeName
                                            value: [UIFont systemFontOfSize:12.0]
                                            range: range];

            range = NSMakeRange(range.location + range.length, length - (range.location + range.length));

            count++;
        }
    }

    self.attributedText = mutableAttributedString;
}


@end
0
Chris Allinson