Подтвердить что ты не робот

Настройка шрифта BOLD на iOS UILabel

Я назначил пользовательский шрифт "Helvetica" с размером 14 уже для текста в UILabel с помощью Interface Builder.

Я использую повторное использование одной и той же метки в нескольких местах, но в каком-то месте я должен отображать текст жирным шрифтом.

Есть ли способ, который я могу просто указать, чтобы сделать существующий шрифт полужирным, вместо того, чтобы снова создать весь UIFont? Это то, что я делаю сейчас:

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

Ответ 1

UPDATE:
Начиная с 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];

Ответ 2

Это рыбное дело, чтобы возиться с именами шрифтов. И, предположительно, у вас есть курсивный шрифт, и вы хотите сделать его жирным - добавив просто @"-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)

Ответ 3

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

Ответ 4

Расширение этого отвечает быстрым:

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

Ответ 5

Нам просто нужно правильное имя шрифта. Я нахожу, что iOSFonts.com - самый полезный ресурс для того, чтобы точно знать, какое имя использовать.

Вы можете установить Bold + ITALIC, используя FONT NAME "Arial-BoldItalicMT"

Он работает в каждом случае:

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

Ответ 6

Я сделал немного по-другому с Swift

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

Ответ 7

для "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)
    }
}

wulld приятно писать расширение для класса UIFont.

Ответ 8

Вам, вероятно, не нужно "расширение" как таковое, если вы хотите это для любых пользовательских шрифтов...

Просто добавьте функцию (похожую на часть выше), которую вы можете вызывать из любого места (т.е. без класса), а затем вы можете неоднократно обманывать слова в любой строке, вызывая только ОДИН ЛИНИЯ кода:

Чтобы перейти в файл типа constantants.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)

Ответ 9

Мой вклад с расширением для 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()