Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set Specific Font Weight for UILabel in Swift

When people have asked how to set a bold font, most people suggest:

let boldFont = UIFont.boldSystemFont(ofSize: ___)

But take a look at all the font weights that the standard system font offers:

Xcode system font weights

So my question is how do you set a light, semibold, or heavy font weight? The only way that I know how is:

sectionLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];

However, I'm still asking because this isn't strongly typed. Most other class attributes are set by selecting from a fixed set of options and don't require passing a string that I could mistype. I guess I could set my own global enum... But any better ideas?

like image 942
Dave G Avatar asked Feb 19 '18 02:02

Dave G


2 Answers

The very old thread, but someone may be interested in how to do it in Swift.

UIFont.Weight defines all of the options:

  • ultraLight
  • thin
  • light
  • regular
  • medium
  • semibold
  • bold
  • heavy
  • black

you can use simply like that, e.g.:

label.font = UIFont.systemFont(ofSize: size, weight: .bold)

or if you want to keep the previous size:

label.font = UIFont.systemFont(ofSize: label.font!.pointSize, weight: .bold)
like image 192
Krzysztof Skrzynecki Avatar answered Nov 08 '22 18:11

Krzysztof Skrzynecki


I couldn't get the UIFontDescriptor to work with the font weight trait but there is another approach.

let font = UIFont.systemFont(ofSize: 20, weight: .light)

Replace .light with whichever value you want from UIFont.Weight which basically matches the dropdown list shown in your question.

like image 40
rmaddy Avatar answered Nov 08 '22 18:11

rmaddy