Как показать верхний индекс для «®» зарегистрированного символа? - PullRequest
12 голосов
/ 31 мая 2011

У меня проблема с отображением зарегистрированного символа в виде верхнего индекса.Я использовал значение Юникода \ u00AE, но оно показывается в той же строке.Я хотел бы, чтобы это было немного больше остальных текстов.Завершил поиск в Google, но обнаружил верхние индексы для AZ, 0-9 символов, которые упоминаются на сайте Юникода.

Пример кода:

UILabel *myLabel; //do initialize stuff here

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

Спасибо

Ответы [ 6 ]

19 голосов
/ 31 мая 2011

Unicode не имеет символа registered в виде верхнего индекса, поэтому единственный способ сделать это - использовать элемент управления HTML и включить его в теги верхнего индекса: <sup>&reg;</sup>

Вы можете проверить его по адресуhttp://rishida.net/scripts/uniview/

8 голосов
/ 05 января 2014

Начиная с iOS6, вы можете фактически использовать NSAttributedString с UILabel.

Чтобы установить верхний индекс для зарегистрированного символа торговой марки, вы можете использовать следующую категорию:

#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
1 голос
/ 28 сентября 2017

Для простого в использовании решения Swift вы можете оформить заказ HandyUIKit . После импорта в ваш проект (например, через Карфаген - см. Инструкции в README) вы можете сделать что-то вроде этого:

import HandyUIKit

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

Эта строка вернет NSAttributedString, который будет выглядеть точно так же, как , что вы ищете . Просто присвойте свойству UILabel s attributedText и вот и все!


Если вы ищете подписку на текст, просто используйте вместо этого subscripted(font:). Он распознает такие структуры, как CO_{2}. Также есть superAndSubscripted(font:), если вы хотите объединить оба .

См. документы для получения дополнительной информации и дополнительных примеров.

0 голосов
/ 23 июля 2018

Для новичков, это относительно гибкое, быстрое 4 решение, вдохновленное оригинальным ответом Интегрируемого материала. Я написал это как расширение для 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
    }

}
0 голосов
/ 02 сентября 2016

Добавлено к ответу «Интегрирующий материал», уменьшив размер шрифта символа (до жестко заданного значения на данный момент):


.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 голосов
/ 02 июня 2013
<div style="font-size:96px;">
Registered<span style="vertical-align:2.7em; font-size:0.2em;">&reg;</span>
</div>

Числа нуждаются в настройке в зависимости от шрифта и размера точки.

...