web-dev-qa-db-ja.com

iOS UILabelでの太字フォントの設定

Interface Builderを使用してUILabelのテキストにサイズ14の「Helvetica」のカスタムフォントを既に割り当てています。

複数の場所で同じラベルを再利用していますが、ある場所ではテキストを太字で表示する必要があります。

UIFont全体を再度作成する代わりに、既存のフォントを太字にするように指定できる方法はありますか?これは私が今やっていることです:

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

UPDATE:
iOS 8以降、フォント名をいじる必要はなくなりました。代わりに、UIFontDescriptorSymbolicTraitsを使用する新しい回答を参照してください: here および here


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];
83
LE SANG

フォント名を台無しにするのは厄介な仕事です。そして、おそらくあなたはイタリック体のフォントを持ち、それを太字にしたい-名前に単に@"-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)
103
UIFont* boldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[myLabel setFont:boldFont];
33
thatzprem

Swiftで this answerを拡張する:

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

適切なフォント名が必要です。 iOSFonts.comは、使用する名前を正確に知るための最も役立つリソースであることがわかりました。

フォント名「Arial-BoldItalicMT」を使用して、ボールド+イタリックを設定できます

すべてのケースで機能します:

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

私はSwiftで少し違ったやり方をしました

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

「スイフト」のために試してみてください。

このサンプルコントローラーには、すべてのバリアントを含む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クラスの拡張機能を作成すると良いでしょう。

1
ingconti

カスタムフォント用にこれが必要な場合は、おそらく「拡張機能」は必要ありません...

どこからでも(つまりクラスなしで)呼び出すことができる関数を追加するだけで(つまり、クラスなしで)、コードの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に対して次の1行のコードを呼び出すだけです。

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)
0
David West

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()
0
Kevin ABRIOUX