[英]Setting BOLD font on iOS UILabel
我已经使用界面生成器为 UILabel 中的文本分配了大小为 14 的“Helvetica”自定义字体。
我在多个地方重复使用相同的标签,但在某些地方我必须以粗体显示文本。
有什么方法可以指定使现有字体加粗而不是再次创建整个 UIFont 吗? 这就是我现在所做的:
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
弄乱字体名称是一项可疑的业务。 据说你有一个斜体字体,你想让它加粗 - 简单地在名称中添加@"-Bold"
是行不通的。 还有更优雅的方式:
- (UIFont *)boldFontWithFont:(UIFont *)font
{
UIFontDescriptor * fontD = [font.fontDescriptor
fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
return [UIFont fontWithDescriptor:fontD size:0];
}
size:0
表示“保持描述符中的大小”。 如果您需要获得斜体字体,您可能会发现有用的UIFontDescriptorTraitItalic
trait
在 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)
更新:
从 iOS 8 开始,不再需要弄乱字体名称。 而是查看使用UIFontDescriptorSymbolicTraits
较新答案:此处和此处。
myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];
如果你想以编程方式设置它,你必须检查 iOS 是否支持粗体,通常粗体或斜体的格式为 FontName-Bold、FontName-Italic、FontName-BoldItalic。
现在,写一个粗体函数
-(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];
UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];
我们只需要正确的字体名称。 我发现 iOSFonts.com 是准确了解要使用的名称的最有用的资源。
您可以使用字体名称“Arial-BoldItalicMT”设置粗体+斜体
它适用于每种情况:
[myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]];
迅速扩展这个答案:
extension UIFont {
func bold() -> UIFont {
let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
return UIFont(descriptor: descriptor, size: 0)
}
}
我用Swift做的有点不同
var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40)
我为 Swift 4 更新了 UILabel 扩展的贡献:
extension UILabel{
func bold() -> UILabel {
if let descriptor = self.font.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits.traitBold){
self.font = UIFont(descriptor: descriptor, size: 0)
}
return self
}
}
只需像这样调用 .bold() :
let myLabel = UILabel()
myLabel.bold()
对于“快速者”,请尝试一下。
此示例控制器将显示 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 类编写扩展会很好。
非常旧的线程,但没有人展示如何在 Swift 中做到这一点并保持以前的大小:
label.font = UIFont.systemFont(ofSize: label.font!.pointSize, weight: .bold)
你可能不需要这样的“扩展”,如果你想要任何自定义字体......
只需添加一个您可以从任何地方(即没有类)调用的函数(类似于上面的一些),然后您就可以在任何字符串中添加单词,在很多情况下只需调用一行代码:
进入像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)
let boldHelveticaFont = UIFont(name: "HelveticaNeue", size: 25)?.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits.traitBold)
label.font = UIFont(descriptor: boldHelveticaFont!, size: 25)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.