1

Я пытаюсь создать NSAttributedString, который имеет в основном только шрифт по умолчанию, курсив и отличается цветом текста. Довольно легко.NSAttributedString с UIFontWeightTraits

Теперь я хочу, чтобы различные подстроки всей строки до дополнительно быть жирным шрифтом. В основном это должно выглядеть так:

от John Smith от 25.08. в 8:00

(Просто в другой цвет.)

Похоже, я получаю словарь неправильно, что я прохожу в addAttributes(_:_:) функции NSMutableAttributedString «s. Из documentation, я понял, что этот словарь должен выглядеть следующим образом:

[UIFontDescriptorTraitsAttribute: 
    [UIFontWeightTrait: NSNumber(double: Double(UIFontWeightBold))] 

Но это не похоже на работу. Все, что мне нужно, это курсивная строка. У меня явно что-то не так. Есть идеи?

Update: Добавление простой пример

// Preparation 
let rawString = "from John Smith on 25.08. at 8:00" 
let attributedString = NSMutableAttributedString(string: rawString) 
let nameRange = (rawString as NSString).rangeOfString("John Smith") 
let italicFont = UIFont.italicSystemFontOfSize(14) 

// Make entire string italic: works! 
attributedString.addAttributes([NSFontAttributeName : italicFont], range: NSMakeRange(0, 33)) 
// Make the name string additionally bold: doesn't work! 
attributedString.addAttributes([UIFontDescriptorTraitsAttribute: 
     [UIFontWeightTrait: NSNumber(double: Double(UIFontWeightBold))]], range: nameRange) 

// Show it on the label 
attributedStringLabel.attributedText = attributedString 

Спасибо!

+0

Вы должны принять несколько строк атрибутов и объединить их в одну, чтобы показать. –

+0

Вы имеете в виду, что я не могу добавить дополнительные после факта, используя вышеупомянутую функцию? – flohei

ответ

1

UIFontDescriptorTraitsAttribute не признанный ключ в NSAttributedString атрибуты словаря, так получив черты, нужно реконструировать UIFont и использовать ключ NSFontAttributeName.

//prepare the fonts. we derive the bold-italic font from the italic font 
    let italicFont = UIFont.italicSystemFontOfSize(14) 
    let italicDesc = italicFont.fontDescriptor() 
    let italicTraits = italicDesc.symbolicTraits.rawValue 
    let boldTrait = UIFontDescriptorSymbolicTraits.TraitBold.rawValue 
    let boldItalicTraits = UIFontDescriptorSymbolicTraits(rawValue:italicTraits | boldTrait) 
    let boldItalicDescriptor = italicDesc.fontDescriptorWithSymbolicTraits(boldItalicTraits) 
    let boldItalicFont = UIFont(descriptor: boldItalicDescriptor, size: 0.0) 

    //prepare the string 
    let rawString = "from John Smith on 25.08. at 8:00" 
    let attributedString = NSMutableAttributedString(string: rawString) 

    let fullRange = NSMakeRange(0, 33) 
    let nameRange = (rawString as NSString).rangeOfString("John Smith") 

    attributedString.addAttributes([NSFontAttributeName:italicFont], range: fullRange) 
    attributedString.addAttributes([NSFontAttributeName:boldItalicFont], range: nameRange) 

Смотри также: NSAttributedString: Setting FontAttributes doesn't change font

+0

Удивительный, спасибо. Это то, что я искал. Я вспомнил, что раньше видел такой подход, но не мог вспомнить, где и как это работает. Благодаря! – flohei