Как показать верхний индекс для зарегистрированного символа "®"?
У меня проблема с отображением зарегистрированного символа в качестве надстрочного. Я использовал значение unicode\u00AE, но оно отображается в той же строке. Я бы хотел, чтобы у него было немного верхних текстов.
Сделано googling, но найдено надписей для A-Z, 0-9 символов, которые упоминаются на сайте юникода.
Пример кода:
UILabel *myLabel; //do initialize stuff here
myLabel.text = @"My company\u00AE";
Спасибо
Ответы
Ответ 1
Unicode не имеет символа registered
в форме надстроки, поэтому единственный способ сделать это - использовать элемент управления HTML и включить его в надстрочные теги: <sup>®</sup>
Вы можете проверить его на http://rishida.net/scripts/uniview/
Ответ 2
Начиная с 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
Ответ 3
<div style="font-size:96px;">
Registered<span style="vertical-align:2.7em; font-size:0.2em;">®</span>
</div>
Числа нуждаются в настройке в зависимости от вашего шрифта и размера точки.
Ответ 4
Добавлен ответ "Интеграция материала", уменьшив размер шрифта символа (до жесткого кодированного значения):
.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
Ответ 5
Для простого в использовании решения Swift вы можете проверить HandyUIKit. После импорта в свой проект (например, через Carthage - см. Инструкции в README) вы можете сделать что-то вроде этого:
import HandyUIKit
"My company^{®}".superscripted(font: UIFont.systemFont(ofSize: 20, weight: .medium))
Эта строка вернет NSAttributedString
, которая будет выглядеть точно как , что вы ищете. Просто присвойте ему свойству UILabel
attributedText
и , чтобы он!
Если вы ищете текст subscriptip, просто используйте subscripted(font:)
. Он распознает такие структуры, как CO_{2}
. Там также superAndSubscripted(font:)
, если вы хотите объединить оба.
Дополнительную информацию и дополнительные примеры см. в docs.