How do I set bold and italic on UILabel of iPhone/iPad?
Don't try to play with the font names. Using the font descriptor you need no names:
UILabel * label = [[UILabel alloc] init]; // use your label object instead of thisUIFontDescriptor * fontD = [label.font.fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic];label.font = [UIFont fontWithDescriptor:fontD size:0];
size:0
means 'keep the size as is'
With Swift try the following extension:
extension UIFont { func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont { let descriptor = self.fontDescriptor() .fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) return UIFont(descriptor: descriptor, size: 0) } func boldItalic() -> UIFont { return withTraits(.TraitBold, .TraitItalic) }}
Then you may use it this way:
myLabel.font = myLabel.font.boldItalic()
or even add additional traits like Condensed:
myLabel.font = myLabel.font.withTraits(.TraitCondensed, .TraitBold, .TraitItalic)
Update for Swift 4:
extension UIFont { var bold: UIFont { return with(traits: .traitBold) } // bold var italic: UIFont { return with(traits: .traitItalic) } // italic var boldItalic: UIFont { return with(traits: [.traitBold, .traitItalic]) } // boldItalic func with(traits: UIFontDescriptorSymbolicTraits) -> UIFont { guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else { return self } // guard return UIFont(descriptor: descriptor, size: 0) } // with(traits:)} // extension
Use it as follows:
myLabel.font = myLabel.font.bold
or
myLabel.font = myLabel.font.italic
or
myLabel.font = myLabel.font.with(traits: [ .traitBold, .traitCondensed ])
Update for Swift 5
extension UIFont { var bold: UIFont { return with(.traitBold) } var italic: UIFont { return with(.traitItalic) } var boldItalic: UIFont { return with([.traitBold, .traitItalic]) } func with(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont { guard let descriptor = self.fontDescriptor.withSymbolicTraits(UIFontDescriptor.SymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits)) else { return self } return UIFont(descriptor: descriptor, size: 0) } func without(_ traits: UIFontDescriptor.SymbolicTraits...) -> UIFont { guard let descriptor = self.fontDescriptor.withSymbolicTraits(self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptor.SymbolicTraits(traits))) else { return self } return UIFont(descriptor: descriptor, size: 0) }}
@Edinator have a look on this..
myLabel.font = [UIFont boldSystemFontOfSize:16.0f]myLabel.font = [UIFont italicSystemFontOfSize:16.0f];
use any one of the above at a time you want