2012-10-19 87 views
14

我正在iOS上挖掘NSAttributedString。我有一個模型,返回人名和姓氏NSAttributesString。 (我不知道在模型中處理屬性字符串是否是一個好主意!?)我希望第一個名字能夠定期打印,因爲姓氏應該以粗體打印。我不想要的是設置文本大小。所有我發現到目前爲止是這樣的:NSAttributedString將樣式更改爲粗體而不更改pointSize?

- (NSAttributedString*)attributedName { 
    NSMutableAttributedString* name = [[NSMutableAttributedString alloc] initWithString:self.name]; 
    [name setAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]} range:[self.name rangeOfString:self.lastname]]; 
    return name; 
} 

然而,這當然會,覆蓋姓氏的字體大小,這給在UITableViewCell一個非常滑稽的樣子,其中第一名稱會在打印單元格標籤的常規文本大小和姓氏將被打印得非常小。

有什麼辦法可以實現我想要的嗎?

感謝您的幫助!

回答

2

通過表格單元代碼進行上述調用,但是通過從單元格的textLabel中獲取字體大小來傳遞所需的字體大小。

+0

我試過了,但新鮮且乾淨的初始化UITableViewCell爲'textLabel'返回'pointSize''0.0f'(可能是字體或textLabel爲空)!任何想法如何解決這個問題? –

+3

如果你實現'tableView:willDisplayCellAtIndexPath:'委託方法,應該設置字體,你可以在那裏更新你的字體。 – rmaddy

1

您是否嘗試過將尺寸設置爲0.0?

3

使用來自this question技術:

UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody]; 
uint32_t existingTraitsWithNewTrait = UIFontDescriptorTraitBold; 
    fontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait]; 
UIFont *updatedFont = [UIFont fontWithDescriptor:fontDescriptor size:0.0]; 
NSDictionary *attribs = @{NSFontAttributeName : updatedFont}; 
[mutableAttrString setAttributes:attribs range:result.range]; 
2

這裏有一個Swiftextension,使文字加粗,同時保持當前的字體屬性(和文字大小)。

public extension UILabel { 

    /// Makes the text bold. 
    public func makeBold() { 
     //get the UILabel's fontDescriptor 
     let desc = self.font.fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold) 
     //Setting size to '0.0' will preserve the textSize 
     self.font = UIFont(descriptor: desc, size: 0.0) 
    } 

} 
2

如果你只是想大膽的字符串標籤的第二個字,即一個名稱標記,而使用默認的iOS系統字體,即標題或標題等

let s = "\(client.givenName) \(client.surname)" as NSString 

let myAttribute = [ NSFontAttributeName: UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1) ] 
let myString = NSMutableAttributedString(string: "\(s)", attributes: myAttribute) 

let myRange = s.rangeOfString(client.surname) 
let desc = UIFont.preferredFontForTextStyle(UIFontTextStyleTitle1).fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold) 
let new = UIFont(descriptor: desc, size: 0.0) 

myString.addAttribute(NSFontAttributeName, value: new, range: myRange) 

nameLabel.attributedText = myString 
+0

有沒有可能在Obj-C中分享這個版本的機會? –

相關問題