任何方式来粗体的一部分NSString?

有没有办法只加粗string的一部分? 例如:

大约距离: 120米远

谢谢!

可以做的是使用NSAttributedString

 NSString *boldFontName = [[UIFont boldSystemFontOfSize:12] fontName]; NSString *yourString = ...; NSRange boldedRange = NSMakeRange(22, 4); NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString]; [attrString beginEditing]; [attrString addAttribute:kCTFontAttributeName value:boldFontName range:boldedRange]; [attrString endEditing]; //draw attrString here... 

看看这个方便的 NSAttributedString 指南 ,用Core Text绘制NSAttributedString对象。

正如Jacob提到的,你可能想要使用NSAttributedStringNSMutableAttributedString 。 以下是你如何做到这一点的一个例子。

 NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Approximate Distance: 120m away"]; NSRange selectedRange = NSMakeRange(22, 4); // 4 characters, starting at index 22 [string beginEditing]; [string addAttribute:NSFontAttributeName value:[NSFont fontWithName:@"Helvetica-Bold" size:12.0] range:selectedRange]; [string endEditing]; 

如果你不想打扰字体(因为不是每个字体的变体都包含“粗体”),这是另一种方法来做到这一点。 请注意,这是目前仅在OS X上可用的:

  NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:"Approximate Distance: 120m away"]; [attrString beginEditing]; [attrString applyFontTraits:NSBoldFontMask range:NSMakeRange(22, 4)]; [attrString endEditing]; 

上面的代码给了我当崩溃,当我创buildUILabel与这个归属的String。

我用这个代码,它的工作原理:

 NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string]; NSRange boldedRange = NSMakeRange(0, 1); UIFont *fontText = [UIFont systemFontOfSize:12]; //[UIFont fontWithName:@"Lato-Bold" size:12]; NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil]; [attrString setAttributes:dictBoldText range:boldedRange]; 

一个NSString只是一个数据容器。 它不包含任何关于介绍问题的细节。

这听起来像你可能想要做的是用来显示你的string的UILabel大胆的一部分。 我不认为你可以做。 但是你总是可以把用户界面分成三个标签,一个是“近似距离”,一个是“ 120米 ”,另一个是“远离”。 把他们放在一起,你应该得到预期的效果。

另一个select是使用UIWebView和一些标记来显示带有embedded格式信息的string,如下所述:

http://iphoneincubator.com/blog/windows-views/display-rich-text-using-a-uiwebview

在Xamarin ios中,你可以通过这种方式大胆的使用NSString:

 public static NSMutableAttributedString BoldRangeOfString (string str, float fontSize, int startRange, int lengthRange) { var firstAttributes = new UIStringAttributes { Font = UIFont.BoldSystemFontOfSize(fontSize) }; NSMutableAttributedString boldString = new NSMutableAttributedString (str); boldString.SetAttributes (firstAttributes.Dictionary, new NSRange (startRange, lengthRange)); return boldString; } 

并调用这个方法:

 myLabel = new UILabel (); ... myLabel.AttributedText = BoldRangeOfString("my text", fontSize, startRange, lengthRange); 

我加上@Jacob Relkin和@Andrew Marin的答案,否则,我得到了崩溃。 这是iOS9的答案:

 UIFont *boldFont = [UIFont boldSystemFontOfSize:12]; NSString *yourString = @"Approximate Distance: 120m away"; NSRange boldedRange = NSMakeRange(22, 4); NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:yourString]; [attrString beginEditing]; [attrString addAttribute:NSFontAttributeName value:boldFont range:boldedRange]; [attrString endEditing]; 

我看了官方文档: 1和2 。

迅速

还包括dynamic地获取你想要的string的范围

 let nameString = "Magoo" let string = "Hello my name is \(nameString)" let attributes = [NSFontAttributeName:UIFont.systemFontOfSize(14.0),NSForegroundColorAttributeName: UIColor.black] let boldAttribute = [NSFontAttributeName:UIFont.boldSystemFontOfSize(14.0)] let attributedString = NSMutableAttributedString(string: string, attributes: attributes) let nsString = NSString(string: string) let range = nsString.rangeOfString(nameString) if range.length > 0 { attributedString.setAttributes(boldAttribute, range: range) } someLabel.attributedText = attributedString 

要粗体化string而不对其字体进行硬编码,可以使用具有负值的StrokeWidth属性:

 let s = NSMutableAttributedString(string: "Approximate Distance: 120m away") s.addAttribute(NSStrokeWidthAttributeName, value: NSNumber(value: -3.0), range: NSRange(22..<26))