1

我試圖生成一個NSAttributedString基本上只有默認字體,是斜體和不同的文字顏色。足夠簡單,到目前爲止。NSAttributedString與UIFontWeightTraits

現在我想要這整個字符串的不同子串到另外要粗體。它應該基本看起來像這樣:

約翰史密斯於25.08。在8:00

(只是用不同的顏色。)

它看起來像我越來越字典錯了,我傳遞到NSMutableAttributedStringaddAttributes(_:_:)功能。從documentation,我明白,這本字典應該是這樣的:

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

但這似乎並沒有工作。所有我最終都是字符串的斜體版本。我明明在這裏弄錯了。任何想法?

更新:添加簡單的例子

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