Właśnie zaktualizowałem iPoda touch do iOS 7.0.3 i wydaje się, że „HelveticaNeue-Italic” zniknął. Kiedy pytam telefonicznie z:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Otrzymuję następujące fontNames (13):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-ThinItalic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Kiedy robię to samo zapytanie działające w symulatorze, otrzymuję (14):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
**HelveticaNeue-Italic,**
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-Thin_Italic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Czy ktoś jeszcze to widział?
---- Nowa informacja ----
Wróciłem do wideo WWDC 2013 „Using Font with Text Kit” i interesująca część zaczyna się o 12:22. Prezenter mówi o „MetaFonts” w systemie OS X jako przykład. Mówi, że czcionka pod nazwami wygląda tak:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
nie gwarantuje się zwrócenia tej samej podstawowej czcionki w różnych wersjach, a nawet w różnych zastosowaniach. Jego przykładem była Lucinda Grande. Nie wydawał się mówić, że używanie „HelveticaNeue-Italic” może odejść od wersji do wersji.
Skonstruowałem więc eksperyment w iOS 7. Utworzyłem swoją czcionkę za pomocą następującego kodu:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
Otrzymałem poprawny UIFont z powrotem dla fontWithDescriptor i kiedy zapytałem o czcionkę dla fontName za pomocą:
[fontWithDescriptor fontName]
Wróciłem...
HelveticaNeue-Italic
Domyśl???
Zatem możliwą odpowiedzią na 7.0.3 wydaje się być powyższy kod.
---- Dalsze poprawki ----
Chociaż rozwiązanie zadziałało powyżej, nie sądzę, aby było poprawne formalnie. Przerzuciłem się na następujące rozwiązanie
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
To wydaje się robić wszystkie właściwe rzeczy. Wypróbowałem poprzednie podejście z inną rodziną czcionek i wydawało się, że pomyliłem się z fontName i fontFamily. Mam nadzieję że to pomoże!
źródło
Odpowiedzi:
To jest błąd Apple. Został wprowadzony w iOS 7.0.3 i nie został jeszcze naprawiony w iOS 7.0.4. Wygląda na to, że problem został rozwiązany w podglądzie programisty iOS 7.1. Oto kod (dostarczony przez firmę Apple na forach deweloperów) umożliwiający obejście problemu:
Warto również zauważyć, że w aktualnej wersji Xcode (5.0.1 (5A2053)) ta czcionka nie jest wymieniona jako opcja na liście rozwijanej Czcionka w Interface Builder. Więc jeśli wcześniej skonfigurowałeś etykietę z tą czcionką, zauważysz, że interfejs użytkownika jest zdezorientowany, a etykieta kończy się przypisaniem innej czcionki i rozmiaru w czasie wykonywania (patrz zrzut ekranu interfejsu użytkownika poniżej). W przypadku etykiet skonfigurowanych w scenorysach / xibs będziesz musiał zresetować czcionkę w kodzie.
Jako odniesienie tutaj jest dyskusja na temat tego problemu na forach deweloperów.
źródło
To jest błąd w iOS 7.0.3.
Jeśli jawnie używasz HelveticaNeue-Italic, możesz go utworzyć, korzystając z tego obejścia:
Należy jednak pamiętać, że to obejście będzie działać tylko w systemie iOS 7; nie można go wdrożyć w systemie iOS 6 (ponieważ
CTFontRef
iUIFont
nie były one bezpłatne w połączeniu z systemem iOS 6). Jednak w systemie iOS 6 możesz po prostu użyć zwykłego kodu wyszukiwania czcionek.źródło
Wierzę, że to błąd. Zgłosiłem to jako takie w Apple. Niestety, moja aplikacja się teraz zawiesza. Czcionka jest używana w bibliotece innej firmy, której używam. Wiele osób na Twitterze zgłasza problemy.
źródło
Jeśli dynamicznie dostępu do kursywą wtedy zamiast dostępu czcionkę o nazwie
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
użyć[UIFont italicSystemFontOfSize:15.0f]
to działa dobrze dla mnie.źródło
fontWithName:size:
najpierw spróbować uruchomić , a jeśli wynik jestnil
, uruchomitalicSystemFontOfSize:
, co zawsze powinno zwrócić coś, a przynajmniej uniknąć awarii.Obecnie nie znajduję sesji, ale powiedzieli coś, że nie można już polegać na czcionkach, które są już dostępne na iOS7. Mogą się zmieniać nawet w okresie użytkowania aplikacji. Co w zasadzie oznacza: określając czcionki w swojej aplikacji, nie masz nic przeciwko, zamiast tego użyj deskryptorów czcionek lub preferowanych czcionek!
źródło
Znalazłem inne rozwiązanie, które wydaje się działać. Wylogowałem się z połączenia
[[UIFont italicSystemFontOfSize:12.0] fontName]
aby zobaczyć, jaka jest aktualnie używana czcionka systemowa, i zwróciło „.HelveticaNeueInterface-ItalicM3”. Prosty test pokazuje, że użycie
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
Pracuje! Porównując je wizualnie, czcionka zwrócona w powyższym wywołaniu wydaje się być dokładnie taka sama, jak oryginalna czcionka „HelveticaNeue-Italic”.
Ten problem jest prawie na pewno błędem ... Helvetica Neue jest domyślną czcionką w iOS 7, więc nie powinno zabraknąć czcionek z tej rodziny. Wszystko działało dobrze w Xcode v.5.0, ale natychmiast po aktualizacji do 5.0.1 ten problem zaczął się pojawiać. Zgłosiłem błąd, zwracając uwagę Apple. Do tego czasu to rozwiązanie wydaje się działać ...
źródło
Raport o błędzie, który złożyłem w Apple, został oznaczony jako „Zamknięty jako duplikat”. Mam nadzieję, że oznacza to, że uważają to za błąd. Jednak iOS 7.0.4 nie naprawia błędu.
źródło
Wygląda na to, że błąd został naprawiony w iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
zwraca czcionkę.źródło
Miałem taką samą awarię, która miała miejsce tylko w iOS 7.0.3 i 7.0.4 i działa doskonale we wszystkich innych wersjach. Po tak długim śledztwie dowiedziałem się, że @ "HelveticaNeue-Italic" nie jest dostępne w wersjach iOS 7.0.3 i 7.0.4, więc w tych wersjach pojawiałem się powyżej awarii.
Naprawiłem problem z poniższym kodem, może to być pomocne dla kogoś potrzebującego.
Dziennik awarii to:
źródło
Ponieważ nikt nie wspomniał nic o obsłudze kursywy HelveticaNeue w UIWebView, pomyślałem, że podzielę się swoimi odkryciami.
Od wersji 7.0.6 nadal brakuje zwykłej kursywy w UIWebView i wydaje się, że w tej samej rodzinie powraca do UltraLightItalic. Wygląda to trochę dziwnie, gdy znajduje się tuż obok tekstu HelveticaNeue bez kursywy, ponieważ jest o wiele jaśniejszy.
Moje obejście polegało na użyciu zwykłej Helvetica zamiast HelveticaNeue, ale tylko dla kursywy. Więc jeśli masz CSS, który wygląda tak:
... dodałbyś dwie inne klasy do zastąpienia
<i>
i<em>
:Zwykła kursywa Helvetica wygląda dobrze i nie sądzę, by ktokolwiek zauważył, że to nie jest HelveticaNeue.
źródło