Пример NSAttributedString с двумя разными размерами шрифта?

NSAttributedString для меня просто непроницаем.

Я хочу установить UILabel для текста разных размеров, и я понимаю, что NSAttributedString - это путь, но я не могу никуда с ним документировать.

Мне бы это понравилось, если бы кто-то помог мне с конкретным примером.

Например, допустим, что текст, который я хотел, был:

(in small letters:) "Presenting The Great..."
(in huge letters:) "HULK HOGAN!"

Может кто-нибудь показать мне, как это сделать? Или даже, ссылку, что простой и простой, где я мог бы узнать для себя? Клянусь, я попытался понять это через документацию и даже через другие примеры, и я просто не понимаю.

Ответ 1

Вы бы сделали что-то вроде этого...

NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
              value:[UIFont systemFontOfSize:20.0]
              range:NSMakeRange(24, 11)];

Это установит последние два слова в 20-ти точечном тексте; остальная часть строки будет использовать значение по умолчанию (которое, я считаю, составляет 12 баллов). Вещь, которая может смущать настройку размера текста, заключается в том, что вы должны установить шрифт и размер в одно и то же время - каждый объект UIFont инкапсулирует оба этих свойства.

Ответ 2

Решение Swift 3

Кроме того, вы можете использовать функцию append вместо указания индексов в ObjC или Swift:

let attrString = NSMutableAttributedString(string: "Presenting The Great...",
                                           attributes: [ NSFontAttributeName: UIFont.systemFont(ofSize: 20) ])

attrString.append(NSMutableAttributedString(string: "HULK HOGAN!",
                                            attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 40) ]))

Ответ 3

Решение Swift 4:

let attrString = NSMutableAttributedString(string: "Presenting The Great...",
                                       attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 18)]);

attrString.append(NSMutableAttributedString(string: "HULK HOGAN!",
                                        attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: 36)]));

Ответ 4

Если вы хотите сделать это простым способом, существует git репо, называемое OHAttributedLabel, которое я использую, которое предоставляет категорию в NSAttributedString. Он позволяет вам делать такие вещи, как:

NSMutableAttributedString *mystring = [[NSMutableAttributedString alloc] initWithString:@"My String"];
[mystring setTextColor:[UIColor colorWithRGB:78 green:111 blue:32 alpha:1]];
mystring.font = [UIFont systemFontOfSize:14];

Если вы не хотите использовать стороннюю библиотеку, посмотрите эту ссылку для достойного учебника о том, как начать работу с атрибутом строки.

Ответ 5

Решение Swift 4.2:

let attrString = NSMutableAttributedString(string: "Presenting The Great...",
                                                   attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 18)])

attrString.append(NSMutableAttributedString(string: "HULK HOGAN!",
                                                    attributes: [NSAttributedString.Key.font: UIFont.systemFont(ofSize: 36)]))