2013-09-30 14 views
32

Jak mogę obsługiwać typ dynamiczny w UILabel i UITextView w systemie iOS 7? Dostosowuję jeden z naszych projektów na iOS 7 i chciałbym wesprzeć tę funkcję dostępności. Nie mogę znaleźć szczegółowego samouczka w witrynie dla programistów iOS firmy Apple. Wszelkie linki lub przykładowy kod będą mile widziane.Jak obsługiwać typ dynamiczny w etykietach w systemie iOS 7

+0

Sprawdź samouczek [Jak wspierać typ dynamiczny w iOS 7 Apps .] (http://mythoughtsandexperiments.blogspot.in/2013/12/how-to-support-dynamic-type-in-ios-7.html) –

Odpowiedz

57

Jeśli korzystasz z nowych metod UIFont, jesteś prawie na miejscu - wystarczy dodać obserwatora, aby nasłuchiwał zmian.

Zamiast ustawiać konkretny rozmiar czcionki, podczas stylizacji etykiet należy używać metody preferredFontForTextStyle: i pokrewnych metod (jeśli korzystasz z Kreatora interfejsu, możesz wybrać styl bezpośrednio w inspektorze). Na przykład:

self.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

Raz zrobiłeś, że należy słuchać na UIContentSizeCategoryDidChangeNotification. Kiedy otrzymasz to powiadomienie, powinieneś ułożyć etykiety, aby obsługiwały nowo wybrany rozmiar (jeśli korzystasz z funkcji autolayout, zwykle jest to tak proste, jak wysłanie invalidateIntrinsicContentSize do swoich widoków).

Jeśli szukasz oficjalnej dokumentacji, spójrz na numer Text Programming Guide.

+0

Czy nie ma sposobu na dostęp do stylu wybranego w interfejsie Budowniczy? Jeśli nie, to wydaje się dużym niedopatrzeniem. Teraz muszę ustawić go w 2 miejscach, co oznacza, że ​​nieuchronnie się zsynchronizuje. – MacsimusPrime

+0

'preferredFontForTextStyle' zwraca czcionkę systemową, czy jest jakiś sposób, aby to zrobić z niestandardowymi czcionkami? – kevin

1

w Swift 3 i iOS 10 można użyć

headline.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleHeadline) 
headline.adjustsFontForContentSizeCategory = true 

Zobacz this excellent post uzyskać więcej informacji, zwłaszcza jak wspierać wstępnie iOS 10.

Powiązane problemy