【发布时间】:2011-06-10 10:31:51
【问题描述】:
如何在 iPhone/iPad 的UILabel 上设置粗体和斜体?
我搜索了论坛,但没有任何帮助。谁能帮帮我?
【问题讨论】:
-
如果您使用的是没有斜体字体的自定义,您可以[试试这个方法。][1] [1]:stackoverflow.com/questions/21009957/…
标签: ios objective-c swift uilabel uifont
如何在 iPhone/iPad 的UILabel 上设置粗体和斜体?
我搜索了论坛,但没有任何帮助。谁能帮帮我?
【问题讨论】:
标签: ios objective-c swift uilabel uifont
不要尝试使用字体名称。使用字体描述符你不需要名字:
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)
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 ])
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)
}
}
【讨论】:
return withTraits(.TraitBold, .TraitCondensed) 可能应该是 return withTraits(.TraitBold, .TraitItalic) 以匹配函数名称。
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];
您可以设置一个字体名称列表来代替“fontWithName”属性。链接是here
【讨论】:
@Edinator 看看这个..
myLabel.font = [UIFont boldSystemFontOfSize:16.0f]
myLabel.font = [UIFont italicSystemFontOfSize:16.0f];
在你想要的时候使用上述任何一种
【讨论】:
斯威夫特 3
粗体:
let bondFont = UIFont.boldSystemFont(ofSize:UIFont.labelFontSize)
斜体:
let italicFont = UIFont.italicSystemFont(ofSize:UIFont.labelFontSize)
【讨论】:
我有同样的问题,需要在标签和按钮上同时应用粗体和斜体。您可以简单地使用以下代码来实现此效果:
myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];
【讨论】:
使用 iOS 7 系统默认字体,如果您希望保持系统默认字体,您将使用 helvetica neue bold。
[titleText setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]];
或者你可以简单地调用它:
[titleText setFont:[UIFont boldSystemFontOfSize:16.0]];
【讨论】:
btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
btn.titleLabel.font = [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+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()
这在重用单元格时很有用,并且您想删除您在前一个单元格中的标签上放置的斜体
【讨论】:
我最近写了一篇关于 UIFont API 的限制以及如何解决的博客文章。 你可以在here看到它
使用我在那里提供的代码,您可以轻松获得所需的 UIFont:
UIFont *myFont = [FontResolver fontWithDescription:@"font-family: Helvetica; font-weight: bold; font-style: italic;"];
然后将其设置为您的 UILabel(或其他):
myLabel.font = myFont;
【讨论】:
正如这些答案中已经提到的,您只需要正确的字体名称。我发现iOSFonts.com 是最有帮助的资源,可帮助您准确了解要使用的名称。
【讨论】:
粗体文本示例:
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];
【讨论】:
尽管@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
【讨论】:
更新 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)
}
}
【讨论】:
这很简单。这是代码。
[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];
这会对你有所帮助。
【讨论】:
只想提一下,
UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.bold)
UIFont.boldSystemFont(ofSize: 16)
他们有不同的结果......
【讨论】:
针对 Swift 5 进行了更新,并遵循设备的首选尺寸类别。
UIFont.systemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize, weight: .bold)
此处发布的其他答案很好,但有硬编码的 pointSizes。
【讨论】:
很多时候,粗体文本在信息架构方式中被视为另一个级别,因此在一行中没有粗体和常规,因此您可以将其拆分为两个标签/文本视图,一个常规和粗斜体。并使用编辑器选择字体样式。
【讨论】:
使用 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)
【讨论】: