我正在挖掘iOS上的NSAttributedString
。我有一个模型,正在将人姓氏和NSAttributesString
返回。 (我不知道在模型中处理属性字符串是否是一个好主意!?)我希望第一个名字被打印出来,因为姓氏应该用粗体打印。我不想要的是设置文本大小。到目前为止我发现的只有:
- (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
中给出非常有趣的外观,其中第一个名称将以单元格标签的常规文本大小打印出来,姓氏将打印得非常小。
有没有办法达到我想要的目的?
感谢您的帮助!
答案 0 :(得分:4)
这是一个Swift
extension
,它使文字变为粗体,同时保留当前的字体属性(和文字大小)。
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)
}
}
答案 1 :(得分: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 :(得分:2)
从表格单元格代码进行上述调用,但通过从单元格的textLabel获取字体大小来传递所需的字体大小。
答案 3 :(得分: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
答案 4 :(得分:2)
您可以通过将StrokeWidth
属性设置为负值来加粗字符串而不更改其其他属性。
Objective-C:
[name setAttributes:@{NSStrokeWidthAttributeName : @-3.0} range:NSRangeFromString(name.string)];
迅速:
name.setAttributes([.strokeWidth: NSNumber(value: -3.0)], range: NSRangeFromString(name.string))
答案 5 :(得分:1)
您是否尝试将尺寸设为0.0?