如何在iPhone / iPad的UILabel上设置粗体和斜体?


Answers:


132
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

您可以在'fontWithName'属性中设置字体名称的列表。链接位于此处。


5
更好的答案是使用@Maksymilian Wojakowski的扩展方法.withTraits()的方法
不退款

先生,先生,如何在不声明尺寸目标c的情况下设置文本框样式为粗体
Ramani Hitesh,2017年

3
这是有问题的,因为您使用的是固定的字体名称。由于这可能会更改,因此这不是一个好的解决方案。Maksymilian Wojakowski的答案更好,更灵活。
Ray Wojciechowski

274

不要尝试使用字体名称。使用字体描述符,您不需要名称:

UILabel * label = [[UILabel alloc] init]; // use your label object instead of this
UIFontDescriptor * fontD = [label.font.fontDescriptor
            fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold
                            | UIFontDescriptorTraitItalic];
label.font = [UIFont fontWithDescriptor:fontD size:0];

size:0 表示“保持原样”

使用Swift尝试以下扩展:

extension UIFont {

    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor()
            .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits))
        return UIFont(descriptor: descriptor, size: 0)
    }

    func boldItalic() -> UIFont {
        return withTraits(.TraitBold, .TraitItalic)
    }

}

然后,您可以通过以下方式使用它:

myLabel.font = myLabel.font.boldItalic()

甚至添加其他特征,例如浓缩:

myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)

Swift 4更新:

extension UIFont {
  var bold: UIFont {
    return with(traits: .traitBold)
  } // bold

  var italic: UIFont {
    return with(traits: .traitItalic)
  } // italic

  var boldItalic: UIFont {
    return with(traits: [.traitBold, .traitItalic])
  } // boldItalic


  func with(traits: UIFontDescriptorSymbolicTraits) -> UIFont {
    guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else {
      return self
    } // guard

    return UIFont(descriptor: descriptor, size: 0)
  } // with(traits:)
} // extension

如下使用它:

myLabel.font = myLabel.font.bold

要么

myLabel.font = myLabel.font.italic

要么

myLabel.font = myLabel.font.with(traits: [ .traitBold, .traitCondensed ])

Swift 5更新

extension UIFont {
    var bold: UIFont {
        return with(.traitBold)
    }

    var italic: UIFont {
        return with(.traitItalic)
    }

    var boldItalic: UIFont {
        return with([.traitBold, .traitItalic])
    }



    func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits)) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }

    func without(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont {
        guard let descriptor = self.fontDescriptor.withSymbolicTraits(self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptor.SymbolicTraits(traits))) else {
            return self
        }
        return UIFont(descriptor: descriptor, size: 0)
    }
}

5
不知道为什么它没有得到更多的选票!对于没有粗体或斜体样式的字体,这很棒!
克里斯·普林斯

4
啊 我明白了为什么这可能不那么受欢迎。仅在iOS7及更高版本中可用...
克里斯·普林斯

3
不知道在NDA下是否应该考虑这一点,但是在Xcode6和iOS8 GM种子下,我得到了自定义字体的nil字体描述符,因为在iOS7下它不是nil。
克里斯·普林斯

@Maksymilian,我们可以在多个标签中的某个位置拒绝该方法吗,即:uitableview
Majid Bashir

2
请快速注意一下,因为此答案非常有用:return withTraits(.TraitBold, .TraitCondensed)可能应该return withTraits(.TraitBold, .TraitItalic)与函数名称匹配。
BreadicalMD '16

103

@Edinator看看这个。

myLabel.font = [UIFont boldSystemFontOfSize:16.0f]
myLabel.font = [UIFont italicSystemFontOfSize:16.0f];

您想一次使用以上任何一种


1
这两种样式不起作用。在这种情况下,后者为斜体样式。谢谢您的回复!
Edi

@Edinator是的,我知道您一次只能使用一个...我也编辑了我的答案!
Sudhanshu 2011年

8

您可以通过在“ 字体”字段中单击字母“ T”来设置标签的任何字体样式,系列,大小。

标签字体设置


但这是一个大问题,除了使用fontWithName:@“ Arial-Light”外,如何在屏幕快照中指定其他权重?一切都会带来boldSystemFontSize(of:__),但是如果有人想要轻便还是超轻怎么办?
戴夫G

6

我有一个相同的问题,需要在标签和按钮上同时使用粗体和斜体。您可以简单地使用以下代码来实现此效果:

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];

1
我认为,您的意思是“ Arial”,而不是“ Ariel” :)
MMMM

对于Arial,它不起作用。但是,它为Helvetica-BoldOblique工作。请参阅此处的UIFont文档iphonedevwiki.net/index.php/UIFont
sudip

1
您的意思是“ HelveticaNeue”,而不是“ Arial” :)
jpmartineau,2013年

如果我们添加自定义字体该怎么办。
Majid Bashir 2015年

6

使用iOS 7系统默认字体时,如果要保留系统默认字体,将使用helvetica neue粗体。

    [titleText setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]];

或者您可以简单地称之为:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];

6

迅捷3

胆大:

let bondFont = UIFont.boldSystemFont(ofSize:UIFont.labelFontSize)

斜体:

let italicFont = UIFont.italicSystemFont(ofSize:UIFont.labelFontSize)


3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

您也可以使用此字体做粗体标签/按钮字体


3

我对maksymilian wojakowski的响应进行了修改,您可以在其中添加或删除特征

extension UIFont {

    func withTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func withoutTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(  self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptorSymbolicTraits(traits)))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func bold() -> UIFont {
        return withTraits( .traitBold)
    }

    func italic() -> UIFont {
        return withTraits(.traitItalic)
    }

    func noItalic() -> UIFont {
        return withoutTraits(.traitItalic)
    }
    func noBold() -> UIFont {
        return withoutTraits(.traitBold)
    }
}

例子

label.font = label.font.italic().bold()

在重复使用单元格并且您想删除在上一个单元格中贴在标签上的斜体时非常有用


2

我最近写了一篇关于UIFont API的限制以及如何解决它的博客文章。你可以在这里看到

使用此处提供的代码,您可以轻松获得所需的UIFont:

UIFont *myFont = [FontResolver fontWithDescription:@"font-family: Helvetica; font-weight: bold; font-style: italic;"];

然后使用以下命令将其设置为您的UILabel(或其他): myLabel.font = myFont;


2

正如这些答案中已经提到的那样,您只需要正确的字体名称即可。我发现 iOSFonts.com是最准确使用确切名称的最有用的资源。


很棒的资源!我在iOS设备上浏览了它,发现了一个漂亮的字体,然后使用“ fontWithName”来获取它的一个实例。
Markus Knappen Johansson

2

示例粗体:

UILabel *titleBold = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)];
UIFont* myBoldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[titleBold setFont:myBoldFont];

示例斜体文本:

UILabel *subTitleItalic = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 200, 30)];
UIFont* myItalicFont = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
[subTitleItalic setFont:myItalicFont];

2

尽管@tolbard提供的答案是惊人的,并且效果很好!

我觉得为仅用一行代码即可实现的事情创建扩展将是一个致命的挑战。

通过使用以下Swift 4.0中的示例所示设置font属性,可以为您的相同文本获得粗体以及斜体样式: labelUIFontDescriptor

label.font = UIFont(descriptor: UIFontDescriptor().withSymbolicTraits([.traitBold, .traitItalic])!, size: 12)

其他选项包括:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

有关这些符号特征含义的更多信息?拜访这里


2

更新Maksymilian WojakowskiSwift 3的出色回答

extension UIFont {
    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont? {
        guard let descriptorL = self.fontDescriptor.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) else{
            return nil
        }
        return UIFont(descriptor: descriptorL, size: 0)
    }

    func boldItalic() -> UIFont? {
        return withTraits(traits: .traitBold, .traitItalic)
    }
}

1

这很简单。这是代码。

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

这将为您提供帮助。


不会设置斜体。
mattsson '16

这将仅设置为粗体。对于斜体,可以通过界面构建​​器使用。
阿舒(Ashu)2016年

1

只是想提一下,

UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.bold)
UIFont.boldSystemFont(ofSize: 16)

他们有不同的结果...


0

很多时候,粗体文本是在信息体系结构的另一层上考虑的,因此一行中没有粗体和常规,因此您可以将其拆分为两个标签/文本视图,一个常规和粗体斜体。并使用编辑器选择字体样式。


0

使用Swift 5

对于样式= BOLD

label.font = UIFont(name:"HelveticaNeue-Bold", size: 15.0)

对于样式=中

label.font = UIFont(name:"HelveticaNeue-Medium", size: 15.0)

对于样式=薄

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.