148

如何在UILabeliPhone/iPad 上设置粗体和斜体?我搜索了论坛,但没有任何帮助。有人可以帮我吗?

4

19 回答 19

305

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

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()

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

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)
    }
}
于 2014-02-14T10:42:31.963 回答
132
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

您可以设置一个字体名称列表来代替“fontWithName”属性。链接在这里

于 2011-01-17T12:51:08.477 回答
103

@Edinator 看看这个..

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

在您想要的时间使用上述任何一种

于 2011-01-17T13:02:58.720 回答
8

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

标签字体设置

于 2015-08-27T23:47:00.043 回答
7

斯威夫特 3

大胆的:

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

斜体:

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

于 2017-01-02T15:43:56.950 回答
6

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

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];
于 2012-08-12T21:09:07.987 回答
6

使用 iOS 7 系统默认字体,如果您希望保持系统默认字体,您将使用 helvetica neue bold。

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

或者您可以简单地调用它:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];
于 2013-09-26T17:47:02.800 回答
3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

你也可以使用这个来做粗体标签/按钮字体

于 2012-08-13T12:19:54.070 回答
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()

它在重用单元格时很有用,并且您想删除您在前一个单元格中的标签上放置的斜体

于 2017-02-24T12:24:31.330 回答
2

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

使用我在那里提供的代码,您可以获得所需的 UIFont,如下所示:

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

然后将其设置为您的 UILabel (或其他): myLabel.font = myFont;

于 2012-07-27T11:12:39.423 回答
2

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

于 2013-01-28T18:28:35.997 回答
2

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

我觉得为只用一行代码就可以实现的东西创建一个扩展,这太过分了。

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

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

其他选项包括:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

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

于 2019-03-01T13:39:38.213 回答
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];
于 2017-09-08T10:39:33.527 回答
2

更新Maksymilian Wojakowski对 swift 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)
    }
}
于 2017-05-16T13:41:01.893 回答
1

这很简单。这是代码。

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

这将对您有所帮助。

于 2016-02-22T06:45:41.150 回答
0

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

于 2018-09-26T21:22:34.133 回答
0

使用Swift 5

对于风格 = 粗体

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)
于 2019-08-16T13:52:29.507 回答
0

只想提一下,

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

他们有不同的结果...

于 2019-10-08T05:37:55.290 回答
0

为 Swift 5 更新并尊重设备的首选尺寸类别。

// Bold
label.font = UIFont.systemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize, weight: .bold)

// Italic
label.font = UIFont.italicSystemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize)

此处发布的其他答案很好,但有硬编码的 pointSizes。

于 2020-08-31T19:11:18.423 回答