Programing

iOS UILabel에서 굵은 글꼴 설정

lottogame 2021. 1. 9. 09:17
반응형

iOS UILabel에서 굵은 글꼴 설정


Interface Builder를 사용하여 UILabel의 텍스트에 대해 이미 크기가 14 인 'Helvetica'의 사용자 지정 글꼴을 할당했습니다.

여러 곳에서 동일한 라벨을 재사용하고 있지만 어떤 곳에서는 텍스트를 굵게 표시해야합니다.

전체 UIFont를 다시 만드는 대신 기존 글꼴을 굵게 만들도록 지정할 수있는 방법이 있습니까? 이것이 내가 지금하는 일입니다.

myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14];

업데이트 :
iOS 8부터는 더 이상 글꼴 이름을 엉망으로 만들 필요가 없습니다. 대신 새로운 답변 사용하는 것을 볼 UIFontDescriptorSymbolicTraits: 여기여기 .


myLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14];

프로그래밍 방식으로 설정하려면 iOS에서 굵은 글꼴이 지원되는지 확인해야합니다. 일반적으로 Bold 또는 Italic의 형식은 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];

글꼴 이름을 엉망으로 만드는 것은 수상한 사업입니다. 기울임 꼴 글꼴이 있고 굵게 만들고 싶을 것 @"-Bold"입니다. 이름에 단순히 추가하는 것은 작동하지 않습니다. 훨씬 더 우아한 방법이 있습니다.

- (UIFont *)boldFontWithFont:(UIFont *)font
{
    UIFontDescriptor * fontD = [font.fontDescriptor
                fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
    return [UIFont fontWithDescriptor:fontD size:0];
}

size:0'설명자에있는 그대로 크기 유지'를 의미합니다. UIFontDescriptorTraitItalic기울임 꼴 글꼴이 필요한 경우 유용한 특성을 찾을 수 있습니다.

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)

UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];

답변을 신속하게 확장 하십시오 .

extension UIFont {
    func bold() -> UIFont {
        let descriptor = self.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
        return UIFont(descriptor: descriptor, size: 0)
    }
}

올바른 글꼴 이름이 필요합니다. iOSFonts.com이 정확히 어떤 이름을 사용할지 아는 데 가장 유용한 리소스라는 것을 알았습니다.

FONT NAME "Arial-BoldItalicMT"를 사용하여 Bold + ITALIC을 설정할 수 있습니다.

모든 경우에서 작동합니다.

[myLabel setFont:[UIFont fontWithName:@"Arial-BoldItalicMT" size:17]];

저는 Swift 로 조금 다르게했습니다.

var boldHelveticaFont = UIFont(name: "Helvetica Neue", size: 40)?.fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits.TraitBold)
self.InstructionsTextView.font = UIFont(descriptor: boldHelveticaFont!, size: 40)

"swifters"를 위해 시도해보십시오.

이 샘플 컨트롤러는 모든 변형이 포함 된 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 클래스에 대한 확장을 작성하는 것이 좋습니다.


사용자 정의 글꼴에 대해 이것을 원하는 경우 "확장자"가 필요하지 않을 것입니다.

바로 호출하여 많은 경우에, 임의의 문자열에서 단어를 그냥 당신이 (클래스없이 예) 어디서든 호출 할 수 있습니다 (일부 위의 유사) 기능을 추가 한 다음 당신은 대담 할 수 ONE LINE 코드를 :

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)

UILabel 확장에 대한 기여는 Swift 4 용으로 업데이트되었습니다.

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

참조 URL : https://stackoverflow.com/questions/18862868/setting-bold-font-on-ios-uilabel

반응형