How do I set bold and italic on UILabel of iPhone/iPad?
Asked Answered
V

19

155

How do I set bold and italic on UILabel of iPhone/iPad? I searched the forum but nothing helped me. Could anyone help me?

Voluble answered 17/1, 2011 at 12:38 Comment(2)
If you are using custom without a italic font you can [try this method.][1] [1]: #21010457Omnidirectional
Please Check My Answer https://mcmap.net/q/152266/-how-to-make-system-font-quot-black-italic-quot-in-swiftScopula
T
133
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

There is a list of font names that you can set in place of 'fontWithName' attribute.The link is here

Tonometer answered 17/1, 2011 at 12:51 Comment(4)
Better answer is the one with the extension method .withTraits() from @Maksymilian WojakowskiProfanatory
sir sir how to set textbox style bold without declare size objective cDuprey
This is problematic since you are using a fixed font name. As this is subject to change this is no good solution. The answer from Maksymilian Wojakowski is better and far more flexible.Planar
Maybe the questioner used the custom font, so the answer from Maksymilian Wojakowski doesn't "affect the label". I tried using Maksymilian Wojakowski and it doesn't work because I used custom font.Whitver
M
323

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 this
UIFontDescriptor * 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)
    }
}
Mintamintage answered 14/2, 2014 at 10:42 Comment(10)
Don't know why this hasn't received more votes! For fonts where you don't have a bold or italic style, this is great!Gladine
Ahhh. I see why perhaps this isn't so popular. Only available in iOS7 and above...Gladine
Don't know if this should be considered under NDA, but with Xcode6 and iOS8 GM seed, I'm getting a nil font descriptor back for a custom font where as it wasn't nil under iOS7.Gladine
@Maksymilian can we refuse this method somewhere in multiple labels i.e: uitableviewMaegan
Just a quick note since this answer is so helpful: return withTraits(.TraitBold, .TraitCondensed) should probably be return withTraits(.TraitBold, .TraitItalic) to match the function name.Eurythermal
Awesome thx!! Exactly what I was looking for! I have many different text sizes depending on the device, so I needed an easy fix for all! Thx!Solano
This is the best practice.Illhumored
Thanks! I added one more var normal: UIFont { return with(traits: []) }Mcmurray
Is this working using custom fonts? I got nil descriptor.Anthropometry
Please Check with My Answer: https://mcmap.net/q/152266/-how-to-make-system-font-quot-black-italic-quot-in-swiftScopula
T
133
sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

There is a list of font names that you can set in place of 'fontWithName' attribute.The link is here

Tonometer answered 17/1, 2011 at 12:51 Comment(4)
Better answer is the one with the extension method .withTraits() from @Maksymilian WojakowskiProfanatory
sir sir how to set textbox style bold without declare size objective cDuprey
This is problematic since you are using a fixed font name. As this is subject to change this is no good solution. The answer from Maksymilian Wojakowski is better and far more flexible.Planar
Maybe the questioner used the custom font, so the answer from Maksymilian Wojakowski doesn't "affect the label". I tried using Maksymilian Wojakowski and it doesn't work because I used custom font.Whitver
C
104

@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

Chlamys answered 17/1, 2011 at 13:2 Comment(2)
The two styles do not work. In this case the latter prevails italic style. Thank's for reply!Voluble
@Edinator yups i know that you have to use only one at a time ...i had edited my answer too!Chlamys
H
8

You can set any font style, family, size for the label, by clicking on letter "T" in Font field.

Label font settings

Historic answered 27/8, 2015 at 23:47 Comment(1)
But here's the big question, besides using fontWithName:@"Arial-Light" how do you specify the other weights in your screenshot? Everything brings up boldSystemFontSize(of:__) but what if someone wants light or ultra-light?Spiros
K
8

Swift 3

Bold:

let bondFont = UIFont.boldSystemFont(ofSize:UIFont.labelFontSize)

Italic:

let italicFont = UIFont.italicSystemFont(ofSize:UIFont.labelFontSize)

Knickerbocker answered 2/1, 2017 at 15:43 Comment(0)
I
7

With iOS 7 system default font, you'll be using helvetica neue bold if you are looking to keep system default font.

    [titleText setFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.0]];

Or you can simply call it:

    [titleText setFont:[UIFont boldSystemFontOfSize:16.0]];
Immoderacy answered 26/9, 2013 at 17:47 Comment(0)
I
6

I have the same issue that need to apply both Bold and Italic on a label and button. You can simply use following code to achieve this effect:

myLabel.font = [UIFont fontWithName:@"Arial-BoldItalic" size:30.0];
Inefficacious answered 12/8, 2012 at 21:9 Comment(4)
I think, you meant "Arial", not "Ariel" :)Organo
For Arial its not working. But, its working for Helvetica-BoldOblique. See the UIFont documentation here iphonedevwiki.net/index.php/UIFontFelipa
You mean "HelveticaNeue", not "Arial" :)Deyoung
what if we add our custom font.. ??Maegan
T
4

I made a variation of the response of maksymilian wojakowski where you can add or remove a trait(s)

extension UIFont {

    func withTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits).union(self.fontDescriptor.symbolicTraits))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func withoutTraits(_ traits:UIFontDescriptorSymbolicTraits...) -> UIFont {
        let descriptor = self.fontDescriptor
            .withSymbolicTraits(  self.fontDescriptor.symbolicTraits.subtracting(UIFontDescriptorSymbolicTraits(traits)))
        return UIFont(descriptor: descriptor!, size: 0)
    }
    func bold() -> UIFont {
        return withTraits( .traitBold)
    }

    func italic() -> UIFont {
        return withTraits(.traitItalic)
    }

    func noItalic() -> UIFont {
        return withoutTraits(.traitItalic)
    }
    func noBold() -> UIFont {
        return withoutTraits(.traitBold)
    }
}

exemple

label.font = label.font.italic().bold()

it useful when reusing cell and you want to remove the italic you put on a label in a previous cell

Typhoid answered 24/2, 2017 at 12:24 Comment(0)
B
3
 btn.titleLabel.font=[UIFont fontWithName:@"Helvetica neue" size:10];
 btn.titleLabel.font =  [UIFont boldSystemFontOfSize:btnPrev.titleLabel.font.pointSize+3];

you can do bold label/button font also using this

Bibliophage answered 13/8, 2012 at 12:19 Comment(0)
S
3

Updating Maksymilian Wojakowski's awesome answer for swift 3

extension UIFont {
    func withTraits(traits:UIFontDescriptorSymbolicTraits...) -> UIFont? {
        guard let descriptorL = self.fontDescriptor.withSymbolicTraits(UIFontDescriptorSymbolicTraits(traits)) else{
            return nil
        }
        return UIFont(descriptor: descriptorL, size: 0)
    }

    func boldItalic() -> UIFont? {
        return withTraits(traits: .traitBold, .traitItalic)
    }
}
Solano answered 16/5, 2017 at 13:41 Comment(0)
T
3

Example Bold text:

UILabel *titleBold = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 200, 30)];
UIFont* myBoldFont = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
[titleBold setFont:myBoldFont];

Example Italic text:

UILabel *subTitleItalic = [[UILabel alloc] initWithFrame:CGRectMake(10, 35, 200, 30)];
UIFont* myItalicFont = [UIFont italicSystemFontOfSize:[UIFont systemFontSize]];
[subTitleItalic setFont:myItalicFont];
Tabb answered 8/9, 2017 at 10:39 Comment(0)
L
3

Although the answer provided by @tolbard is amazing and works well!

I feel creating an extension for something that can be achieved in just a line of code, would be an over kill.

You can get bold as well italic styling for the same text in your label by setting up the font property using UIFontDescriptor as shown below in the example below using Swift 4.0:

label.font = UIFont(descriptor: UIFontDescriptor().withSymbolicTraits([.traitBold, .traitItalic])!, size: 12)

Other options include:

traitLooseLeading
traitTightLeading
traitUIOptimized
traitVertical
traitMonoSpace
traitCondensed
traitExpanded

For more information on what those symbolic traits mean? visit here

Lalalalage answered 1/3, 2019 at 13:39 Comment(0)
P
2

I recently wrote a blog post about the restrictions of the UIFont API and how to solve it. You can see it at here

With the code I provide there, you can get your desired UIFont as easy as:

UIFont *myFont = [FontResolver fontWithDescription:@"font-family: Helvetica; font-weight: bold; font-style: italic;"];

And then set it to your UILabel (or whatever) with: myLabel.font = myFont;

Pointed answered 27/7, 2012 at 11:12 Comment(0)
P
2

As has already been mentioned in these answers, you just need the right font name. I find that iOSFonts.com is the most helpful resource for knowing exactly what name to use.

Pernambuco answered 28/1, 2013 at 18:28 Comment(1)
Great resource! I browsed it in my iOS device and found a good looking font and then used "fontWithName" to get a instance of it.Viniferous
L
2

This is very simple. Here is the code.

[yourLabel setFont:[UIFont boldSystemFontOfSize:15.0];

This will help you.

Lucais answered 22/2, 2016 at 6:45 Comment(2)
That does not set italic.Ober
This will set bold only. For Italic you can use by interface builder.Lucais
S
1

Many times the bolded text is regarded in an information architecture way on another level and thus not have bolded and regular in one line, so you can split it to two labels/textViews, one regular and on bold italic. And use the editor to choose the font styles.

Soundboard answered 26/9, 2018 at 21:22 Comment(0)
A
1

With Swift 5

For style = BOLD

label.font = UIFont(name:"HelveticaNeue-Bold", size: 15.0)

For style = Medium

label.font = UIFont(name:"HelveticaNeue-Medium", size: 15.0)

For style = Thin

label.font = UIFont(name:"HelveticaNeue-Thin", size: 15.0)
Appenzell answered 16/8, 2019 at 13:52 Comment(0)
H
1

Just want to mention that,

UIFont.systemFont(ofSize: 16, weight: UIFont.Weight.bold)
UIFont.boldSystemFont(ofSize: 16)

They have different outcome...

Hybridism answered 8/10, 2019 at 5:37 Comment(0)
C
0

Updated for Swift 5 and respects the device's preferred size category.

// Bold
label.font = UIFont.systemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize, weight: .bold)

// Italic
label.font = UIFont.italicSystemFont(ofSize: UIFont.preferredFont(forTextStyle: .body).pointSize)

The other answers posted here are good, but have hard-coded pointSizes.

Coercion answered 31/8, 2020 at 19:11 Comment(3)
This should be the new accepted answer.Asceticism
Answer completely ignores the italic part of the question.Shake
Updated the answer to include italic font.Coercion

© 2022 - 2024 — McMap. All rights reserved.