在iOS UILabel上设置BOLD字体
我已经使用Interface Builder为UILabel中的文本分配了大小为14的“Helvetica”自定义字体。
我在多个地方使用相同的标签,但在某些地方,我必须以粗体显示文本。
有没有什么办法可以指定使现有的字体粗体,而不是再次创build整个UIFont? 这就是我现在所做的:
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
更新:
从iOS 8开始,不再需要使用字体名称。 相反,请参阅使用UIFontDescriptorSymbolicTraits
更新的答案: 这里和这里 。
myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
如果要以编程方式设置,则必须在iOS中检查粗体types是否支持,通常粗体或斜体将使用FontName-Bold,FontName-Italic,FontName-BoldItalic格式。
现在,写一个大胆的function
-(void)boldFontForLabel:(UILabel *)label{ UIFont *currentFont = label.font; UIFont *newFont = [UIFont fontWithName:[NSString stringWithFormat:@"%@-Bold",currentFont.fontName] size:currentFont.pointSize]; label.font = newFont; }
然后调用它
[self boldFontForLabel:yourLabel];
混乱的字体名称是一个可怕的业务。 而且据说你有一个斜体字体,你想使它粗体 – 仅仅加上@"-Bold"
这个名字是行不通的。 有更多更优雅的方式:
- (UIFont *)boldFontWithFont:(UIFont *)font { UIFontDescriptor * fontD = [font.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold]; return [UIFont fontWithDescriptor:fontD size:0]; }
size:0
表示“保持大小,因为它在描述符中”。 如果您需要获得斜体字体,您可能会发现有用的UIFontDescriptorTraitItalic
特征
在Swift中,写一个简单的扩展就不错了:
extension UIFont { func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont { let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) return UIFont(descriptor: descriptor, size: 0) } func bold() -> UIFont { return withTraits(.TraitBold) } func italic() -> UIFont { return withTraits(.TraitItalic) } func boldItalic() -> UIFont { return withTraits(.TraitBold, .TraitItalic) } }
那么你可以这样使用它:
myLabel.font = myLabel.font.boldItalic() myLabel.font = myLabel.font.bold() myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)
UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]]; [myLabel setFont:boldFont];
在swift中扩展这个答案:
extension UIFont { func bold() -> UIFont { let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold) return UIFont(descriptor: descriptor, size: 0) } }
我们只需要正确的字体名称。 我发现iOSFonts.com是知道使用什么名字的最有用的资源。
您可以使用字体名称“Arial-BoldItalicMT”来设置Bold + ITALIC
它适用于每种情况:
[myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]];
我用Swift做了一点点改变
var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold) self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40)
为“swifters”尝试。
此示例控制器将显示所有变体的4个标签。
import UIKit class ViewController: UIViewController { var labl: UILabel? var labl2: UILabel? var labl3: UILabel? var labl4: UILabel? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let font = UIFont.systemFontOfSize(32) labl = UILabel(frame: CGRectMake(20,20,400, 45)) labl!.text = "Attention:" labl!.font = font labl2 = UILabel(frame: CGRectMake(20,60,400, 45)) labl2!.text = "Attention:" labl2!.font = bold(font) labl3 = UILabel(frame: CGRectMake(20,100,400, 45)) labl3!.text = "Attention:" labl3!.font = italic(font) labl4 = UILabel(frame: CGRectMake(20,140,400, 45)) labl4!.text = "Attention:" labl4!.font = boldAndItalic(font) self.view.addSubview(labl!) self.view.addSubview(labl2!) self.view.addSubview(labl3!) self.view.addSubview(labl4!) } // nice to write an extension... func bold(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold]) return UIFont(descriptor: descriptor, size: 0) } func boldAndItalic(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitBold, .TraitItalic]) return UIFont(descriptor: descriptor, size: 0) } func italic(font: UIFont) -> UIFont { let descriptor = font.fontDescriptor().fontDescriptorWithSymbolicTraits([.TraitItalic]) return UIFont(descriptor: descriptor, size: 0) } }
很高兴为UIFont类写一个扩展。
你可能不需要这样的“扩展”,如果你想这个任何自定义字体…
只需添加一个函数(类似于上面的一些),你可以从任何地方调用(即没有课程),然后你可以在任何string中强化单词,通过调用一行代码:
要进入像constants.swift文件:
import Foundation import UIKit func addBoldText(fullString: NSString, boldPartOfString: NSString, font: UIFont!, boldFont: UIFont!) -> NSAttributedString { let nonBoldFontAttribute = [NSFontAttributeName:font!] let boldFontAttribute = [NSFontAttributeName:boldFont] let boldString = NSMutableAttributedString(string: fullString as String, attributes:nonBoldFontAttribute) boldString.addAttributes(boldFontAttribute, range: fullString.rangeOfString(boldPartOfString as String)) return boldString }
然后,你可以为任何UILabel调用这一行代码:
self.UILabel.attributedText = addBoldText("Check again in 30 DAYS to find more friends", boldPartOfString: "30 DAYS", font: normalFont!, boldFont: boldSearchFont!) //Mark: Albeit that you've had to define these somewhere: let normalFont = UIFont(name: "INSERT FONT NAME", size: 15) let boldFont = UIFont(name: "INSERT BOLD FONT", size: 15)