UIFont / CTFont — wat is het, lettertype soorten en Core Text

Auteur: IT Sectr Gepubliceerd: 2026-07-23 Leestijd: 9 min

UIFont en CTFont — zijn klassen voor het werken met lettertypen in iOS: UIFont van UIKit voor configuratie van tekst op hoog niveau in UILabel en UITextView, CTFont van Core Text voor weergave op laag niveau met volledige controle over glyphs en metriek. Volgens Apple Developer Documentation wordt UIFont gebruikt in 90% van de standaard UI-componenten, terwijl CTFont wordt toegepast in aangepaste tekst-motoren en editors. Beide klassen vertegenwoordigen hetzelfde lettertype, maar op een ander abstractieniveau.

Belangrijkste punten

  • UIFont — UIKit-klasse op hoog niveau voor het werken met lettertypen in UI-componenten
  • CTFont — Core Text-klasse op laag niveau voor nauwkeurige controle over typografie
  • UIFont wordt gemaakt via systemFont, preferredFont of initWithName, CTFont — via CTFontCreateWithName
  • Dynamic Type — adaptief lettertypesysteem van iOS dat automatisch reageert op toegankelijkheidsinstellingen
  • CTFont biedt directe toegang tot glyph-metriek, kerning en OpenType-tabellen

Wat zijn UIFont en CTFont?

UIFont — is een UIKit-klasse die een lettertype vertegenwoordigt voor het weergeven van tekst in UI-componenten: UILabel, UITextView, UITextField. Het biedt een eenvoudige interface voor het verkrijgen van systeem- en aangepaste lettertypen met specificatie van grootte, gewicht en stijl. UIFont staat niet toe om rechtstreeks kerning, ligaturen en OpenType-functies te beheren — hiervoor wordt Core Text gebruikt.

CTFont — is een Core Text-type (CTFontRef) dat toegang op laag niveau biedt tot lettertypegegevens. CTFont werkt rechtstreeks met Core Graphics voor weergave, ondersteunt alle mogelijkheden van OpenType en TrueType, inclusief alternatieve glyphs, ligaturen en variabele lettertypen. CTFont wordt intern gebruikt door UIKit voor het renderen van UIFont, maar is ook direct beschikbaar voor aangepaste tekeningen.

Toll-Free Bridging

UIFont en CTFont ondersteunen toll-free bridging — conversie tussen typen zonder extra kosten. Casten van UIFont as CTFont of CTFont as UIFont is mogelijk in Swift en Objective-C. Dit maakt het mogelijk om de UIKit-API op hoog niveau te gebruiken voor configuratie en Core Text op laag niveau voor weergave zonder het kopiëren van lettertypegegevens.

Lettertypebeschrijving

Beide klassen gebruiken UIFontDescriptor (UIKit) / CTFontDescriptor (Core Text) voor het beschrijven van lettertypekenmerken: naam, grootte, gewicht, stijl, transformatiematrix. Descriptor is een woordenboek van attributen dat kan worden aangepast om nieuwe lettertypen te maken op basis van bestaande. Bijvoorbeeld, voeg traitItalic toe aan een descriptor om een cursieve versie van hetzelfde lettertype te krijgen.

UIFont — UIKit-lettertypen

UIFont biedt verschillende fabrieksmethoden voor het maken van lettertypen. systemFont(ofSize:) retourneert het systeemlettertype San Francisco (iOS) of Helvetica (oudere versies). boldSystemFont, italicSystemFont — varianten met stijl. preferredFont(forTextStyle:) retourneert een Dynamic Type-lettertype voor de opgegeven stijl: .headline, .body, .caption1, .footnote. Deze lettertypen worden automatisch geschaald bij het wijzigen van de tekstgrootte-instellingen in het systeem.

Voor het laden van aangepaste lettertypen wordt UIFont(name:size:) gebruikt met de PostScript-naam van het lettertype. Het lettertype moet vooraf worden toegevoegd aan Info.plist en worden opgenomen in de bundle van de app. Volgens Apple wordt aanbevolen om UIFont te gebruiken voor alle standaard UI-componenten en alleen over te stappen op CTFont wanneer aangepaste weergave nodig is.

Dynamic Type

Dynamic Type — adaptief lettertypesysteem geïntroduceerd in iOS 7. De gebruiker kiest de gewenste tekstgrootte in Instellingen — van zeer klein tot zeer groot. UIFont.preferredFont retourneert automatisch een lettertype van de juiste grootte. Voor correcte werking moeten alle UILabel’s adjustsFontForContentSizeCategory = true hebben. Dynamic Type is verplicht voor toegankelijkheidscompatibiliteit.

UIFontDescriptor

UIFontDescriptor maakt het mogelijk om lettertypeattributen te wijzigen zonder een nieuw exemplaar vanaf nul te maken. Methoden addingAttributes(_:), withSymbolicTraits(_:), withFamily(_:) retourneren een nieuwe descriptor met gewijzigde parameters. Dit is handig voor het verkrijgen van lettertypevarianten: voeg traitBold toe aan een systeemlettertype om een vetgedrukte versie te krijgen zonder de PostScript-naam te kennen.

CTFont — Core Text-lettertypen

CTFont (CTFontRef) — is een Core Text-type voor het werken op laag niveau met lettertypen. Het wordt gemaakt met de functies CTFontCreateWithName, CTFontCreateWithFontDescriptor, CTFontCreateCopyWithAttributes. Elke functie retourneert een lettertype met de opgegeven interface, grootte en optionele attributen. CTFont wordt gebruikt in Core Graphics voor het renderen van tekst op aangepaste UIView’s via drawRect.

CTFont biedt toegang tot metriek die niet beschikbaar is in UIFont: CTFontGetGlyphsForCharacters retourneert een array van glyphs voor de opgegeven tekens, CTFontGetAdvancesForGlyphs — breedte van elke glyph, CTFontGetBoundingBox — grenzen van een glyph. Dit is nodig voor het bouwen van aangepaste tekstlayouts: kolommen, rotatie, tekstomloop.

Lettertypemetriek

CTFontGetAscent, CTFontGetDescent, CTFontGetLeading retourneren de verticale metriek van het lettertype. CTFontGetUnitsPerEm — aantal eenheden per em-square, gebruikt voor het berekenen van verhoudingen. CTFontGetGlyphCount — totaal aantal glyphs in het lettertype. Deze gegevens zijn cruciaal voor drukwerktypografie en aangepaste opmaak waar nauwkeurige positionering van elk teken vereist is.

OpenType en variabele lettertypen

CTFont ondersteunt OpenType-functies: CTFontCopyFeatures retourneert een woordenboek van beschikbare lettertypefuncties (ligaturen, alternatieve tekens, kerning), CTFontEnableFeature activeert een specifieke optie. Variabele lettertypen (Variable Fonts) worden geconfigureerd via CTFontCopyVariation en CTFontCreateCopyWithVariation, waardoor weight, width en slant in een continu bereik kunnen worden gewijzigd.

Hoe UIFont in code te gebruiken

Het maken van UIFont in Swift gebeurt via een van de fabrieksmethoden of directe initialisatie op naam. De meest voorkomende methode is systemFont(ofSize:weight:) voor systeemlettertypen of preferredFont(forTextStyle:) voor Dynamic Type. Voor aangepaste lettertypen wordt UIFont(name:size:) gebruikt met opgave van de PostScript-naam.

Systeemlettertype met verschillende gewichten

UIFont.systemFont(ofSize:weight:) accepteert UIFont.Weight — van .ultraLight tot .black. Deze methode retourneert het systeemlettertype San Francisco met het bijbehorende gewicht. UIFont.monospacedSystemFont, UIFont.monospacedDigitSystemFont retourneren monospace-lettertypen voor code en cijfers. Alle systeemlettertypen ondersteunen automatisch Dynamic Type.

swift
let regularFont = UIFont.systemFont(ofSize: 16, weight: .regular)
let boldFont = UIFont.systemFont(ofSize: 16, weight: .bold)
let headlineFont = UIFont.preferredFont(forTextStyle: .headline)
let monoFont = UIFont.monospacedSystemFont(ofSize: 14, weight: .regular)
label.font = headlineFont

Elk lettertype kan direct worden toegewezen aan de eigenschap font van UILabel of worden gebruikt in NSAttributedString via NSFontAttributeName. Systeemlettertypen worden gecached door iOS, dus het opnieuw maken van een systeemlettertype brengt geen extra kosten met zich mee.

Aangepast lettertype uit Bundle

Om een aangepast lettertype te gebruiken, voegt u het TTF- of OTF-bestand toe aan de projectbundle en specificeert u het in Info.plist (UIAppFonts). De PostScript-naam van het lettertype kan worden achterhaald via UIFont.familyNames en UIFont.fontNames(forFamilyName:). Na registratie is het lettertype beschikbaar via UIFont(name:size:) op elk punt in de app.

swift
// Alle lettertypefamilienamen ophalen
for family in UIFont.familyNames {
    let names = UIFont.fontNames(forFamilyName: family)
    print("\(familie): \(namen)")
}
// Aangepast lettertype laden
if let customFont = UIFont(name: "MyCustomFont-Regular", size: 18) {
    label.font = customFont
}

Als de naam van het lettertype onjuist is, retourneert UIFont(name:size:) nil. Het wordt aanbevolen om vooraf alle beschikbare namen van lettertypen weer te geven via UIFont.familyNames en UIFont.fontNames(forFamilyName:) tijdens het debuggen om er zeker van te zijn dat het lettertype correct is geregistreerd.

Aangepaste lettertypen met UIFont en CTFont

Het laden van aangepaste lettertypen is op twee manieren mogelijk: statische registratie via Info.plist (UIAppFonts) en dynamische registratie via CTFontManagerRegisterGraphicsFont. De eerste methode is eenvoudiger — het lettertype is direct na het starten van de app beschikbaar. De tweede wordt gebruikt voor lettertypen die uit het netwerk worden geladen of op verzoek worden gedownload.

Dynamische registratie is nuttig voor on-demand bronnen: als de app 20+ lettertypen bevat, hoeven ze niet allemaal in de initiële bundle te worden opgenomen, maar kunnen ze bij eerste gebruik worden gedownload. CTFontManagerRegisterFontsForURLs registreert lettertypen van opgegeven URL’s. Na registratie is het lettertype beschikbaar via UIFont(name:size:) zoals gebruikelijk.

CTFontCreateWithName voor aangepast lettertype

Voor aangepaste weergave via Core Text gebruikt u CTFontCreateWithName met de PostScript-naam van het lettertype. Het verschil met UIFont is dat CTFont kan worden gemaakt met een transformatiematrix (CTFontCreateWithNameAndOptions) — voor het maken van vervormde lettertypen: kantelen, schalen op de X-as, roteren. Dit is niet beschikbaar in UIFont zonder het gebruik van affiene transformaties.

swift
// CTFont maken met scheefstandmatrix
var matrix = CGAffineTransform(a: 1, b: 0, c: 0.2, d: 1, tx: 0, ty: 0)
let ctFont = CTFontCreateWithName(
    "Helvetica" as CFString,
    24, &matrix)
// Toll-free bridging gebruiken met UIFont
let uiFont = ctFont as UIFont
label.font = uiFont

De transformatiematrix maakt het mogelijk om italic-varianten te maken zonder een apart lettertypebestand. Parameter c (skew) voegt kanteling toe aan tekens. De matrix maakt ook horizontaal schalen van het lettertype mogelijk — het maken van samengedrukte of uitgebreide varianten van hetzelfde lettertype.

Verschillen tussen UIFont en CTFont

Het belangrijkste verschil tussen UIFont en CTFont is het abstractieniveau. UIFont biedt een eenvoudige API voor veelvoorkomende taken: een systeemlettertype verkrijgen, de grootte wijzigen, toepassen op UILabel. CTFont geeft volledige controle over het lettertype: toegang tot glyphs, metriek, OpenType-tabellen en variabele assen. De keuze hangt af van de taak.

KenmerkUIFontCTFont
FrameworkUIKitCore Text
AanmakensystemFont / preferredFont / initWithNameCTFontCreateWithName / CTFontCreateWithDescriptor
Toegang tot glyphsNeeCTFontGetGlyphsForCharacters
OpenType-functiesBeperkt (UIFontDescriptor)Volledige toegang
Variabele lettertypenVia UIFontDescriptorCTFontCopyVariation / CreateCopyWithVariation
WeergaveAutomatisch in UI-componentenCore Graphics, aangepast

Voor 95% van de iOS-ontwikkeltaken is UIFont voldoende. Core Text met CTFont is gerechtvaardigd bij het maken van teksteditors, PDF-generatoren, boeken met typografische opmaak of apps met aangepaste weergave van zeldzame talen.

Prestaties en best practices

Werken met lettertypen in iOS vereist het in acht nemen van prestaties. Elk uniek lettertype wordt bij eerste gebruik in het geheugen geladen en neemt bronnen in beslag. Systeemlettertypen San Francisco zijn vooraf geladen en creëren geen extra kosten. Aangepaste lettertypen worden uit een bestand geladen en na het eerste laden door het systeem gecached.

Het wordt aanbevolen om het aantal unieke lettertypen in de app te beperken tot 3-5 families. Elk lettertype neemt 50 KB tot 2 MB in het geheugen in beslag. Het gebruik van verschillende gewichten van dezelfde familie (regular, bold, medium) is efficiënter dan het laden van meerdere verschillende families.

Cachen van UIFont

Het systeem cached aangemaakte exemplaren van UIFont, dus herhaalde aanroepen van UIFont.systemFont(ofSize: 16, weight: .regular) maken geen nieuw object aan. Echter, UIFont(name:size:) voor aangepaste lettertypen wordt niet altijd gecached — het wordt aanbevolen om veelgebruikte lettertypen op te slaan in statische eigenschappen of een NSCache-cache om opnieuw laden uit een bestand te voorkomen.

Asynchroon laden van lettertypen

Bij dynamische registratie van lettertypen via CTFontManagerRegisterGraphicsFont kan het proces asynchroon zijn als het lettertypebestand uit het netwerk wordt gedownload. In dit geval moeten UILabel of UITextView een back-upsysteemlettertype weergeven tot het laden is voltooid. Na registratie wordt het lettertype beschikbaar en werkt het scherm de tekstweergave automatisch bij.

Veelgestelde vragen

Kan UIFont worden geconverteerd naar CTFont en vice versa?

Ja, UIFont en CTFont ondersteunen toll-free bridging. Conversie wordt gedaan door eenvoudig casten: UIFont as CTFont of CTFont as UIFont. Er zijn geen extra kosten of gegevenskopieën — beide klassen verwijzen naar hetzelfde lettertype-object in het geheugen.

Welke heeft de voorkeur voor gebruik in UIKit?

Gebruik voor alle UI-componenten UIFont. Het is geoptimaliseerd voor UIKit, ondersteunt Dynamic Type, schaalt correct bij wijziging van systeeminstellingen. CTFont is alleen gerechtvaardigd voor aangepaste weergave via Core Graphics of wanneer toegang tot laagwaardige lettertypemetriek nodig is.

Hoe achterhaal ik de naam van een lettertype voor UIFont(name:size:)?

Gebruik UIFont.familyNames voor de lijst van families en UIFont.fontNames(forFamilyName:) voor PostScript-namen. Roep deze code aan in debugmodus en vind het gewenste lettertype. De PostScript-naam bevat meestal de familienaam en het stijlkenmerk: “SFProText-Regular”, “HelveticaNeue-Bold”.

Ondersteunt UIFont variabele lettertypen?

Ja, via UIFontDescriptor kunnen variabele assen worden geconfigureerd: weight, width, slant. De UIFont-API voor variabele lettertypen is echter beperkt in vergelijking met CTFontCopyVariation. Gebruik voor volledige controle over variabele assen Core Text en CTFontCreateCopyWithVariation.

Hoe UIFont correct cachen?

Maak een statisch woordenboek of NSCache met een sleutel van de combinatie van naam en grootte. Voor systeemlettertypen cached iOS exemplaren automatisch, maar voor aangepaste lettertypen gemaakt via UIFont(name:size:) wordt aanbevolen objecten in de app-cache op te slaan om opnieuw laden uit het TTF-bestand te voorkomen.

Samenvatting

  • UIFont — UIKit-klasse op hoog niveau voor lettertypen in UI-componenten met Dynamic Type
  • CTFont — Core Text-type op laag niveau voor weergave en toegang tot glyphs
  • UIFont wordt gemaakt via systemFont, preferredFont of UIFont(name:size:)
  • CTFont wordt gemaakt via CTFontCreateWithName of CTFontCreateWithDescriptor
  • Toll-free bridging maakt gratis conversie van UIFont naar CTFont en vice versa mogelijk
  • Dynamic Type is verplicht voor toegankelijkheid: gebruik preferredFont en adjustsFontForContentSizeCategory
  • Voor UIKit gebruikt u UIFont, voor aangepaste weergave — CTFont

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook