簡體   English   中英

在 iOS UILabel 上設置 BOLD 字體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM