【问题标题】:How do I set bold and italic on UILabel of iPhone/iPad?iPhone/iPad的UILabel如何设置粗体和斜体?
【发布时间】:2011-06-10 10:31:51
【问题描述】:

如何在 iPhone/iPad 的UILabel 上设置粗体和斜体? 我搜索了论坛,但没有任何帮助。谁能帮帮我?

【问题讨论】:

标签: ios objective-c swift uilabel uifont


【解决方案1】:

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

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

【讨论】:

  • 不知道为什么这个没有得到更多的选票!对于没有粗体或斜体样式的字体,这很棒!
  • 啊。我明白为什么这可能不那么受欢迎了。仅适用于 iOS7 及更高版本...
  • 不知道这是否应该在 NDA 下考虑,但是使用 Xcode6 和 iOS8 GM 种子,我得到了一个自定义字体的 nil 字体描述符,因为它在 iOS7 下不是 nil .
  • @Maksymilian 我们可以在多个标签的某处拒绝此方法,即:uitableview
  • 只是一个简短的说明,因为这个答案非常有帮助:return withTraits(.TraitBold, .TraitCondensed) 可能应该是 return withTraits(.TraitBold, .TraitItalic) 以匹配函数名称。
【解决方案2】:
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

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

【讨论】:

  • 更好的答案是来自@Maksymilian Wojakowski 的扩展方法 .withTraits()
  • 先生,如何在不声明大小目标 c 的情况下设置文本框样式粗体
  • 这是有问题的,因为您使用的是固定字体名称。由于这可能会发生变化,因此这不是一个好的解决方案。 Maksymilian Wojakowski 的回答更好、更灵活。
  • 也许提问者使用了自定义字体,所以 Maksymilian Wojakowski 的回答不会“影响标签”。我尝试使用 Maksymilian Wojakowski,但它不起作用,因为我使用了自定义字体。
【解决方案3】:

@Edinator 看看这个..

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

在你想要的时候使用上述任何一种

【讨论】:

  • 这两种样式都不行。在这种情况下,后者盛行斜体样式。谢谢回复!
  • @Edinator 是的,我知道您一次只能使用一个...我也编辑了我的答案!
【解决方案4】:

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

【讨论】:

  • 但是这里有个大问题,除了使用 fontWithName:@"Arial-Light" 你如何在你的截图中指定其他权重?一切都会出现boldSystemFontSize(of:__) 但是如果有人想要轻或超轻怎么办?
【解决方案5】:

斯威夫特 3

粗体:

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

斜体:

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    • 我想,你的意思是“Arial”,而不是“Ariel”:)
    • 对于 Arial,它不起作用。但是,它适用于 Helvetica-BoldOblique。请参阅此处的 UIFont 文档iphonedevwiki.net/index.php/UIFont
    • 你的意思是“HelveticaNeue”,而不是“Arial”:)
    • 如果我们添加自定义字体会怎样.. ??
    【解决方案7】:

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

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

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

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

    【讨论】:

      【解决方案8】:
       btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
       btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];
      

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          【解决方案10】:

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

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

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

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

            • 很棒的资源!我在我的 iOS 设备上浏览它并找到了一个好看的字体,然后使用“fontWithName”来获取它的一个实例。
            【解决方案12】:

            粗体文本示例:

            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];
            

            【讨论】:

              【解决方案13】:

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

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

              您可以通过使用UIFontDescriptor 设置字体属性来为label 中的相同文本设置bold 以及italic 样式,如下面的示例所示下面使用 Swift 4.0

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

              其他选项包括:

              traitLooseLeading
              traitTightLeading
              traitUIOptimized
              traitVertical
              traitMonoSpace
              traitCondensed
              traitExpanded
              

              想了解更多关于这些象征性特征的含义的信息? visit here

              【讨论】:

                【解决方案14】:

                更新 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)
                    }
                }
                

                【讨论】:

                  【解决方案15】:

                  这很简单。这是代码。

                  [yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];
                  

                  这会对你有所帮助。

                  【讨论】:

                  • 那不设置斜体。
                  • 这将只设置粗体。对于斜体,您可以由界面生成器使用。
                  【解决方案16】:

                  只想提一下,

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

                  他们有不同的结果......

                  【讨论】:

                    【解决方案17】:

                    针对 Swift 5 进行了更新,并遵循设备的首选尺寸类别。

                    UIFont.systemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize, weight: .bold)
                    

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

                    【讨论】:

                    • 这应该是新接受的答案。
                    【解决方案18】:

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

                    【讨论】:

                      【解决方案19】:

                      使用 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)
                      

                      【讨论】:

                        猜你喜欢
                        • 2012-12-10
                        • 2012-12-06
                        • 2015-10-02
                        • 2016-08-10
                        • 2010-11-25
                        • 2011-03-03
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多