Использование атрибута "атрибут" в интерфейсе Builder
Я пытаюсь отказаться от использования NSAttributedString в моем контроллере viewController, решив использовать параметр "Attributed" (как указано в "Plain" ) в поле "текст" инспектора атрибутов для UILabel.
Я выбрал отдельные слова, которые я хочу атрибутировать, и изменил их шрифт, это правильно отражено в окне предварительного просмотра текста и в сценах в самой IB:
![enter image description here]()
Однако симулятор не отражает эти изменения, кажется, что во время выполнения шрифт, указанный для атрибутов, не используется (когда я меняю цвет, это работает так, как ожидалось). Я добавил шрифты к моему проекту и к моему plist безрезультатно:
![enter image description here]()
Я не нашел никакой документации по этой функции, и она вполне может быть похожа на функцию "текстовых стилей" в IB (по сути, бесполезная на данный момент), - но просто хотела посмотреть, не было ли у кого-нибудь удачи что-то подобное в прошлое.
Любая помощь или предложения очень ценится, спасибо.
Редактировать 03/07/15
Хорошо, я рад сообщить, что этот вопрос окончательно разрешен в Xcode 7 (все еще в бета-версии). Поэтому мы можем, наконец, поставить эту проблему на отдых. Спасибо всем, кто пытался понять это вместе со мной.
Ответы
Ответ 1
В Xcode 7.0 beta: я нашел, что это работает.
Раскадровка:
http://imgur.com/Wb5H4ds
Вывод:
http://imgur.com/iOV8tJF
ИЛИ
. Вы можете сделать это динамически.
-(void)attributedText{
UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(20, 100, 200, 44)];
NSString *newsTitle = @"Hello";
NSString *sportTtle = @"World";
NSString *title = [NSString stringWithFormat:@"%@ %@", newsTitle,sportTtle];
textView.text = title;
UIColor *color = [UIColor redColor];
UIFont *font = [UIFont fontWithName:@"Arial" size:20.0];
NSDictionary *attrs = @{NSForegroundColorAttributeName : color,NSFontAttributeName:font};
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithAttributedString:textView.attributedText];
[attrStr addAttributes:attrs range:[textView.text rangeOfString:sportTtle]];
textView.attributedText = attrStr;
[self.view addSubview:textView];
}
Ответ 2
Проблема с шрифтами. Обходной путь для этого: папка чистой/чистой сборки. Иногда помогают.
/UPDATE: Я знаю, что это звучит как "глупый совет" - но это сделало трюк в моем случае, поэтому опубликуйте его здесь, чтобы сэкономить время.
Ответ 3
Я получил эту работу в xcode 6.1. Я добавил UILabel со словами "Hello World" и изменил шрифт на Didod.
Вот xml-код моей раскадровки. Сопоставьте это против вашего и посмотрите, что-то не так.
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cd6-WA-P1d">
<rect key="frame" x="20" y="91" width="275" height="21"/>
<attributedString key="attributedText">
<fragment content="Hello World">
<attributes>
<color key="NSColor" cocoaTouchSystemColor="darkTextColor"/>
<font key="NSFont" size="24" name="Didot"/>
<paragraphStyle key="NSParagraphStyle" alignment="right" lineBreakMode="wordWrapping" baseWritingDirection="natural"/>
</attributes>
</fragment>
</attributedString>
<nil key="highlightedColor"/>
</label>
Ответ 4
Я пытался сделать это с атрибутами меток в базовой ячейке таблицы стиля.
Как только вы выберете опцию "Attributed" в Interface Builder, ваши пользовательские шрифты не будут отображаться в подборщике шрифтов.
Вы можете заметить, что сборщик шрифтов - это стандартный набор шрифтов для системы.
Фокус в том, чтобы установить шрифты в /Library/Fonts. Теперь они появятся в диалоговом окне "Шрифты", когда вы измените метку на "Атрибут", а также в представлении раскадровки и просмотра.
Однако это все еще не работает во время выполнения. И если вы просмотрите раскадровку на другом компьютере без установленного шрифта, Interface Builder вернется к "близкому совпадению" (Lucida Grande в моем случае).
Есть одно преимущество для всего этого: если вы экспериментируете с причудливым форматированием, приятно видеть его в интерфейсе Builder. Затем вы можете посмотреть источник для раскадровки и скопировать атрибуты в исходный код.
Не забывайте reset ваш ярлык "Обычный" в Interface Builder, иначе проблемы с "близким совпадением" выполняются, как описано выше.
Ответ 5
Вы меняете текст этой метки в коде.
Когда вы используете атрибут config в ярлыке Interface Builder, не изменяйте что-либо, относящееся к этой метке в коде.