任何方式来粗体的一部分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提到的,你可能想要使用NSAttributedString
或NSMutableAttributedString
。 以下是你如何做到这一点的一个例子。
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))