Zoeken…


Aangepaste lettertypen insluiten

Ondersteuning voor aangepast lettertype
Toepassingen die aangepaste lettertypen willen gebruiken, kunnen die lettertypen nu in hun toepassingsbundel opnemen en deze lettertypen bij het systeem registreren door de sleutel UIAppFonts op te nemen in hun Info.plist-bestand. De waarde van deze sleutel is een reeks tekenreeksen die de lettertypebestanden in de bundel van de toepassing identificeren. Wanneer het systeem de sleutel ziet, worden de opgegeven lettertypen geladen en beschikbaar gemaakt voor de toepassing.

Nadat de lettertypen zijn ingesteld in de Info.plist , kunt u uw aangepaste lettertypen gebruiken als elk ander lettertype in IB of programmatisch.

  1. Sleep uw lettertype naar de map Xcode Supporting Files. Vergeet niet uw app te markeren in het gedeelte 'Toevoegen aan doelen'. Vanaf dit moment kunt u dit lettertype in IB gebruiken en kiezen uit de lettertypepallet.

voer hier de afbeeldingsbeschrijving in

  1. Om dit lettertype op het apparaat beschikbaar te maken, opent u Info.plist en voegt u Fonts provided by application key (UIAppFonts). Voeg de lettertypenaam toe als waarde aan de toets Item 0. Opmerking: de naam van het lettertype kan verschillen van de bestandsnaam van uw lettertype. voer hier de afbeeldingsbeschrijving in
  1. Download de aangepaste toegevoegde lettertypenaam met behulp van het onderstaande fragment

[ Swift 3 ]

for family in UIFont.familyNames {
            print("\(family)")

            for name in UIFont.fontNames(forFamilyName: family) {
                print("   \(name)")
            }
        }

[ Doelstelling - C ]

for (NSString *familyName in [UIFont familyNames]){
        NSLog(@"Family name: %@", familyName);
        for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
            NSLog(@"--Font name: %@", fontName);
        }
    }

Aangepaste lettertypen met storyboard

Aangepaste lettertypen voor UI-componenten van storyboard kunnen eenvoudig worden bereikt met door de gebruiker gedefinieerde runtime-attributen in storyboard en categorieën .

De voordelen zijn,

  • Het is niet nodig om uitgangen te definiëren voor het ui-element
  • U hoeft het lettertype voor elementen niet programmatisch in te stellen.

Stappen om te volgen

  1. Lettertypebestand: voeg het lettertypebestand (.ttf) toe aan de toepassingsbundel en voeg de vermelding voor het lettertype toe in Info.plist onder Lettertype geleverd door de toepassing zoals in deze documentatie van aangepaste lettertypen.

  2. Categorieën definiëren: voeg een bestand zoals UIKit + IBExtensions toe en voeg de categorieën toe voor UI-elementen zoals UILabel, UIButton etc. waarvoor u een aangepast lettertype wilt instellen. Alle categorieën hebben een aangepaste eigenschap, bijvoorbeeld fontName . Dit wordt later vanaf het storyboard gebruikt om een aangepast lettertype in te stellen (zoals in stap 4).

UIKit + IBExtensions.h

#import <UIKit/UIKit.h>

//Category extension for UILabel
@interface UILabel (IBExtensions)

@property (nonatomic, copy) NSString *fontName;
@end

// Category extension for UITextField
@interface UITextField (IBExtensions)

@property (nonatomic, copy) NSString *fontName;
@end

// Category extension for UIButton
@interface UIButton (IBExtensions)

@property (nonatomic, copy) NSString *fontName;
@end
  1. Getters en Setters: definieer getters en setters voor de eigenschap fontName voor elke toegevoegde categorie.

UIKit + IBExtensions.m

#import "UIKit+IBExtensions.h"

@implementation UILabel (IBExtensions)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end

@implementation UITextField (IBExtensions)

- (NSString *)fontName {
    return self.font.fontName;
}

- (void)setFontName:(NSString *)fontName {
    self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end

@implementation UIButton (IBExtensions)

- (NSString *)fontName {
    return self.titleLabel.font.fontName;
}

- (void)setFontName:(NSString *)fontName{
    self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
  1. Lettertype instellen in storyboard: voeg een item toe in door de gebruiker gedefinieerde runtime-attributen met fontName als keyPath en de naam van uw aangepaste lettertype als waarde met type als String zoals getoond.

voer hier de afbeeldingsbeschrijving in

Hiermee wordt uw aangepaste lettertype ingesteld tijdens het uitvoeren van de app.

Opmerkingen:

  • Lato-Regular is het aangepaste lettertype dat ik heb gebruikt.
  • Dezelfde naam in het .ttf- bestand dat in de bundel is toegevoegd, moet zonder extensie in storyboard worden gebruikt.
  • De tekengrootte is hetzelfde als deze is gedefinieerd in de kenmerkinspecteur van het UI-element.

Aangepaste lettertypen toepassen op besturingselementen in een Storyboard

Het volgende voorbeeld laat zien hoe aangepaste lettertypen op een navigatiebalk kunnen worden toegepast en bevat correcties voor een aantal eigenaardige gedragingen die zijn gevonden in Xcode. Men kan de aangepaste lettertypen ook toepassen op andere UIControls zoals UILabels , UIButtons en meer door de attributencontrole te gebruiken nadat het aangepaste lettertype aan het project is toegevoegd. Let op de externe links naar werkende voorbeelden en video's onderaan.

  1. Selecteer uw navigatiebalk in uw navigatiecontroller

navbar

  1. Wijzig het titellettertype in de Attributes Inspector

Titel lettertype

(U moet waarschijnlijk de bartint voor de navigatiebalk omschakelen voordat Xcode het nieuwe lettertype oppikt)

Opmerkingen (kanttekeningen)

Geverifieerd dat dit werkt op Xcode 7.1.1+. ( Zie onderstaande voorbeelden )

  1. U moet de tint van de navigatiebalk schakelen voordat het lettertype van kracht wordt (lijkt een fout in Xcode; u kunt het terugzetten naar standaard en het lettertype blijft hangen)
  2. Als u een systeemlettertype kiest ~ Zorg ervoor dat de grootte niet 0.0 is (anders wordt het nieuwe lettertype genegeerd)

grootte

  1. Het lijkt erop dat dit zonder problemen werkt wanneer er slechts één NavBar in de weergavehiërarchie staat. Het lijkt erop dat secundaire NavBars in dezelfde stapel worden genegeerd. (Merk op dat als u de navBar van de master-navigatiecontroller toont, alle andere aangepaste navBar-instellingen worden genegeerd).

Gotchas (deux)

Sommige hiervan worden herhaald, wat betekent dat ze zeer waarschijnlijk het vermelden waard zijn.

  1. Soms wordt het storyboard xml beschadigd. Dit vereist dat u de structuur in Storyboard bekijkt als broncodemodus (klik met de rechtermuisknop op het storyboard-bestand> Openen als ...)
  2. In sommige gevallen werd de tag navigatieItem gekoppeld aan het door de gebruiker gedefinieerde runtime-kenmerk ingesteld als een xml-kind van de view-tag in plaats van de view-controller-tag. Als dit het geval is, verwijdert u deze tussen de tags voor een goede werking.
  3. Schakel de NavBar Tint om te controleren of het aangepaste lettertype wordt gebruikt.
  4. Controleer de parameter size van het lettertype, tenzij u een dynamische lettertypestijl gebruikt
  5. Weergavehiërarchie overschrijft de instellingen. Het lijkt erop dat één lettertype per stapel mogelijk is.

Resultaat

navbar-cursief

Monsters

Omgaan met aangepaste lettertypen

Opmerking ~ Een mooie checklist is te vinden op de Code With Chris-website en u kunt het voorbeeld downloadproject zien.

Als je je eigen lettertype hebt en dat in je storyboard wilt gebruiken, dan is er een behoorlijke reeks antwoorden op de volgende SO-vraag . Eén antwoord identificeert deze stappen.

  1. Krijg je aangepaste lettertypebestand (.ttf, .ttc)
  2. Importeer de lettertypebestanden naar uw Xcode-project
  3. Voeg in de app-info.plist een sleutel toe met de naam Lettertypen die door de toepassing wordt verstrekt. Het is een arraytype, voeg al uw lettertypebestandsnamen toe aan de array, let op: inclusief de bestandsextensie.
  4. Ga in het storyboard op de navigatiebalk naar Attribuutinspecteur, klik op de rechterknop van het gebied voor het selecteren van lettertypen. Kies in het pop-upvenster Lettertype naar aangepast en kies de familie van de ingesloten lettertypenaam.

Oplossing voor aangepast lettertype

Dus Xcode ziet er natuurlijk uit alsof het aangepaste lettertypen op UINavigationItem aankan, maar die functie wordt gewoon niet correct bijgewerkt (het geselecteerde lettertype wordt genegeerd).

UINavigationItem

Om dit te omzeilen:

Eén manier is om het gebruik van het storyboard en het toevoegen van een coderegel op te lossen: voeg eerst een UIView (UIButton, UILabel of een andere UIView-subklasse) toe aan de View Controller (niet het navigatie-item ... Xcode staat momenteel niet toe dat te doen dat). Nadat u het besturingselement hebt toegevoegd, kunt u het lettertype in het storyboard wijzigen en een referentie als uitlaat toevoegen aan uw View Controller. Wijs die weergave gewoon toe aan de UINavigationItem.titleView. U kunt indien nodig ook de tekstnaam in code instellen. Gemelde bug (23600285).

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

Opmerking - Dit voorbeeld is afgeleid van een antwoord dat ik op SO heb gepost ( hier ).



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow