1

私はNSAttributedStringを生成しようとしていますが、これは基本的にデフォルトのフォントしか持っていない、イタリック体と別のテキスト色です。これまでのところ、十分に簡単です。NSAttributedString with UIFontWeightTraits

ここでは、この文字列全体の異なる部分文字列をに加えて、さらにに太字で表記します。基本的には次のようになります。

ジョンスミス on 25.08私はNSMutableAttributedStringさんaddAttributes(_:_:)関数に渡すことを、辞書が間違って取得していますように八時

で(ただ、別の色インチ)

に見えます。

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

しかし、これは動作していないよう:documentationから、私はこの辞書は、次のようになりますことを理解しました。私が終わるのは、文字列のイタリック体です。私は明らかにここで何か間違っています。何か案が?

更新:

// 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

あなたは複数の属性の文字列を取得し、表示するために1にそれらを結合する必要があります。 –

+0

上記の関数を使って事実の後に追加することはできないのですか? – flohei

答えて

1

UIFontDescriptorTraitsAttributeはそうあなたがUIFontを再構築し、NSFontAttributeNameキーを使用する必要がある特性を得た、NSAttributedString属性辞書の認識キーではありません。

//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

関連する問題