Niestandardowa czcionka w storyboardzie?

Mam czcionkę dodaną do mojego projektu iOS. Jest w projekcie i kopiowane, gdy projekt buduje. Wydaje się, że jest to prawidłowa czcionka i pojawi się, jeśli wyświetlę wszystkie czcionki na urządzeniu za pośrednictwem aplikacji. Mam plist skonfigurowany poprawnie, aby zawierać czcionkę. Nie wydaje mi się, aby znaleźć się, aby użyć go w moich kontrolkach tekstowych, przyciskach itp.w sekcji storyboard Xcode 4.2. Co więcej, nie wydaje mi się, abym mógł wpisać nazwę czcionki, zmusza mnie to do użycia okna dialogowego czcionki. Próbowałem zainstaluj tę czcionkę również w systemie, ale nie wydaje się, aby pojawiła się na tej liście. Czy muszę to zrobić tylko w kodzie, Czy Mogę to zrobić za pośrednictwem interfejsu storyboard?

Zauważ, że mogę to uruchomić w kodzie, ale byłoby znacznie wygodniej zrobić to za pomocą storyboardu.

Author: Rob Keniger, 2012-02-01

7 answers

Aktualizacja: Xcode 6 Interface Builder pozwala teraz wybrać niestandardowe czcionki i będzie renderować je w czasie projektowania poprawnie.

Wiem, że to pytanie jest dość stare, ale starałem się znaleźć łatwy sposób na łatwe określenie niestandardowej czcionki w Storyboard (lub Interface Builder) dla iOS 5 i znalazłem dość wygodne rozwiązanie.

Najpierw upewnij się, że dodałeś czcionkę do projektu, wykonując ten samouczek. Pamiętaj również, że UINavigationBar, UITabBar i niestandardową czcionkę Uisegmentedcontrol można określić za pomocą metody setTitleTextAttributes: serwera pośredniczącego UIAppearance.

Dodaj poniższe kategorie do projektu dla UIButton, UITextField, UILabel i innych komponentów, które wymagają niestandardowej czcionki. Kategorie po prostu implementują nową właściwość fontName, która zmienia bieżącą czcionkę elementu przy zachowaniu rozmiaru czcionki.

Aby określić czcionkę w Storyboardzie, po prostu wybierz żądany element (Etykieta, przycisk, widok tekstu itp) i dodaj atrybut Runtime zdefiniowany przez użytkownika z ścieżką kluczaustawioną na fontNametypu String i wartość z nazwą niestandardowej czcionki.

Niestandardowa czcionka Storyboard

I to wszystko, nie musisz nawet importować kategorii. W ten sposób nie potrzebujesz gniazdka dla każdego komponentu interfejsu, który wymaga niestandardowej czcionki i nie musisz go ręcznie kodować.

Weź pod uwagę, że czcionka nie pojawi się w Storyboardzie, ale zobaczysz ją, gdy działa na urządzeniu lub symulatorze.


Pliki kategorii

UIButton+TCCustomFont.h :

#import <UIKit/UIKit.h>

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

UIButton+TCCustomFont.m :

#import "UIButton+TCCustomFont.h"

@implementation UIButton (TCCustomFont)

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

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

@end

UILabel+TCCustomFont.h :

#import <UIKit/UIKit.h>

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

UILabel+TCCustomFont.m :

#import "UILabel+TCCustomFont.h"

@implementation UILabel (TCCustomFont)

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

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

@end

UITextField+TCCustomFont.h :

#import <UIKit/UIKit.h>

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

UITextField+TCCustomFont.m :

#import "UITextField+TCCustomFont.h"

@implementation UITextField (TCCustomFont)

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

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

@end

Również do pobrania z GIST a także jako pojedynczy plik .

Rozwiązywanie problemów

Jeśli uruchamiasz się z błędami runtime, ponieważ właściwość fontName nie jest określona, po prostu dodaj flagę -all_loadpod Inne flagi linkera w ustawieniach projektu, aby wymusić dołączenie do linkera kategorii.

 144
Author: redent84,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 13:00:33

Z Xcode6 . 0, jako xcode6.0 release Uwaga:

Interface Builder renderuje osadzone niestandardowe czcionki iOS w czasie projektowania, dając dokładniejszy podgląd tego, jak gotowa aplikacja będzie wyglądać, z poprawnymi wymiarami.

Możesz ustawić czcionkę etykiety w storyboardzie.Możesz wykonać następujące czynności

  1. Get you custom font file (.ttf, .ttc)
  2. Zaimportuj pliki czcionek do projektu Xcode

    Tutaj wpisz opis obrazka

  3. W app-info.plist , Dodaj klucz o nazwie czcionki dostarczone przez aplikację . jest to typ tablicy, dodaj całą nazwę pliku czcionki do tablicy, Uwaga: łącznie z rozszerzeniem pliku.

Tutaj wpisz opis obrazka

  1. w storyboardzie przeciągnij Etykietę UILabel do interfejsu, wybierz etykietę i przejdź do Inspektora atrybutów ,kliknij prawym przyciskiem ikony obszaru Font select . w wyskakującym panelu wybierz Fontdo Custom, i wybierz rodzinę z umieszczoną nazwą czcionki.

Tutaj wpisz opis obrazka

Ref do

 58
Author: monjer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 12:15:06

To jest bug w XCode, jest tam od 3.x i nadal nie naprawione. Ja też napotkałem ten sam problem, nawet próbowałem dodać go do mojego systemu bez powodzenia. Oto kolejny post o tym czcionki nie wyświetlające się w Interface Builder

 5
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:07

Odpowiedź Monjera jest prawidłowa. Jeśli, podobnie jak ja, nie widzisz dodanej czcionki po kompilacji, upewnij się, że dodałeś ją do faz budowania (cele -> fazy budowania -> Kopiuj zasoby pakietu -> Dodaj swoje pliki czcionek)

 3
Author: HugglesNL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 13:51:58

Rozwiązanie Redent84 było super!

Dodałbym tylko poprawkę, dodałbym kategorię na NSObject, więc trzeba to zrobić tylko raz.

NSObject+CustomFont.h

#import <Foundation/Foundation.h>

@interface NSObject (CustomFont)

@property (strong, nonatomic) NSString *fontName;
@property (strong, nonatomic) UIFont *font;

@end

NSObject+CustomFont.m

#import "NSObject+CustomFont.h"

@implementation NSObject (CustomFont)

@dynamic font;

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

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

@end
 0
Author: Rodrigo Ruiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 17:06:54

Żadne z nich nie zadziałało na mnie, ale to zadziałało.

#import <UIKit/UIKit.h>

@interface UILabelEx : UILabel


@end

#import "UILabelEx.h"
#import "Constants.h"

@implementation UILabelEx

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection {
    [super traitCollectionDidChange: previousTraitCollection];

    self.font = [UIFont fontWithName:APP_FONT size:self.font.pointSize];   
}
@end
 0
Author: Jules,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-13 09:12:29

Począwszy od XCode 9.4, XCode nadal nie respektuje czcionek bezpośrednio w storyboardzie. Można je zobaczyć w czasie projektowania, ale nie w czasie wykonywania. Jeśli używasz fontWithName API, dowiadujesz się, że zwraca nil, ale gdy jest używany w storyboard / xib, nie ma sposobu, aby wiedzieć, dlaczego nie pojawia się.

  • Jedynym sposobem, aby upewnić się, że działa łatwo ze Storyboard / XIB w czasie wykonywania, jest dodanie .ttc/ttf do Copy Bundle Resources fazy budowania.

  • Od wersji 9.4 dodawanie nazw plików czcionek do informacji.plist wydaje się, że nie jest to już wymóg.

 0
Author: Nirav Bhatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-09 13:47:45