Baru saja memutakhirkan iPod touch saya ke iOS 7.0.3 dan "HelveticaNeue-Italic" sepertinya telah menghilang. Ketika saya bertanya di telepon dengan:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Saya mendapatkan fontNames berikut (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
Ketika saya melakukan kueri yang sama yang berjalan di simulator, saya mendapatkan (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
Adakah yang melihat ini?
---- Informasi baru ----
Saya kembali ke video WWDC 2013 "Menggunakan Font dengan Kit Teks" dan bagian yang menarik dimulai pada pukul 12:22. Pembawa acara berbicara tentang "MetaFonts" di OS X sebagai contoh. Apa yang dia katakan adalah bahwa font di bawah panggilan seperti:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
tidak dijamin untuk mengembalikan font dasar yang sama di berbagai versi atau bahkan penggunaan yang berbeda. Contohnya adalah Lucinda Grande. Dia tampaknya tidak mengatakan bahwa penggunaan "HelveticaNeue-Italic" dapat berpindah dari satu versi ke versi lainnya.
Jadi saya membuat percobaan di iOS 7. Saya membuat font saya dengan kode berikut:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
Saya mendapatkan UIFont yang valid kembali untuk fontWithDescriptor dan ketika saya menanyakan font untuk fontName dengan:
[fontWithDescriptor fontName]
Aku kembali ...
HelveticaNeue-Italic
Pergi gambar ???
Jadi jawaban yang mungkin untuk 7.0.3 sepertinya adalah kode di atas.
---- Tweak lebih lanjut ----
Meskipun solusinya berhasil di atas, menurut saya itu tidak benar secara formal. Saya telah beralih ke solusi berikut
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Ini tampaknya melakukan semua hal yang benar. Saya mencoba pendekatan sebelumnya dengan keluarga font lain dan tampaknya menjadi bingung dengan fontName dan fontFamily. Semoga ini membantu!
sumber
Jawaban:
Ini adalah bug Apple. Ini diperkenalkan di iOS 7.0.3 dan belum diperbaiki pada iOS 7.0.4. Tampaknya telah diperbaiki dalam pratinjau pengembang iOS 7.1. Berikut adalah kode (disediakan oleh Apple di forum pengembang) untuk mengatasi masalah tersebut:
Perlu juga dicatat bahwa dalam versi Xcode saat ini (5.0.1 (5A2053)) font ini tidak terdaftar sebagai opsi dalam daftar drop-down Font di Interface Builder. Jadi jika sebelumnya Anda mengonfigurasi label dengan font ini, Anda akan melihat bahwa ui bingung dan label akhirnya diberi beberapa font dan ukuran lain saat runtime (lihat ui screencap di bawah). Untuk label yang dikonfigurasi di storyboard / xibs, Anda perlu mengatur ulang font di kode.
Untuk referensi di sini adalah diskusi masalah di forum pengembang.
sumber
Ini adalah bug di iOS 7.0.3.
Jika Anda secara eksplisit menggunakan HelveticaNeue-Italic, Anda dapat membuatnya menggunakan solusi ini:
Namun, perhatikan bahwa solusi ini hanya akan berfungsi di iOS 7; itu tidak dapat diterapkan ke iOS 6 (karena
CTFontRef
danUIFont
tidak dijembatani bebas pulsa di iOS 6). Namun, di iOS 6 Anda cukup menggunakan kode pencarian font biasa.sumber
Ini adalah keyakinan saya bahwa ini adalah bug. Saya telah mengajukannya seperti itu ke Apple. Sayangnya bagi saya, aplikasi saya sekarang mogok. Font ini digunakan di perpustakaan pihak ketiga yang saya gunakan. Banyak orang di Twitter melaporkan masalah.
sumber
Jika Anda secara dinamis mengakses font italic maka bukan mengakses font dengan nama
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
menggunakan[UIFont italicSystemFontOfSize:15.0f]
ini bekerja dengan baik bagi saya.sumber
fontWithName:size:
terlebih dahulu, dan jika hasilnya adalahnil
, jalankanitalicSystemFontOfSize:
, yang seharusnya selalu mengembalikan sesuatu, dan setidaknya menghindari crash.Saat ini saya tidak menemukan sesi tersebut tetapi mereka mengatakan sesuatu bahwa Anda tidak dapat mengandalkan font yang tersedia lagi di iOS7. Mereka bahkan dapat berubah selama masa pakai aplikasi Anda. Yang pada dasarnya berarti: Saat Anda menentukan font di aplikasi Anda, Anda kacau, gunakan deskriptor font atau font pilihan sebagai gantinya!
sumber
Saya telah menemukan solusi lain yang tampaknya berhasil. Saya keluar dari panggilan ke
[[UIFont italicSystemFontOfSize:12.0] fontName]
untuk melihat font miring sistem sebenarnya yang digunakan, dan menampilkan ".HelveticaNeueInterface-ItalicM3". Sebuah tes sederhana menunjukkan bahwa menggunakan
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
berhasil! Membandingkannya secara visual, fonta yang dikembalikan oleh panggilan di atas tampak persis sama dengan font asli 'HelveticaNeue-Italic'.
Masalah ini hampir pasti merupakan bug ... Helvetica Neue adalah font default di iOS 7, jadi font di keluarga tersebut tidak boleh hilang. Semuanya bekerja dengan baik di Xcode v.5.0, tetapi segera setelah meningkatkan ke 5.0.1, masalah ini mulai muncul. Saya telah mengajukan bug dengan Apple mencatat sebanyak itu. Sampai saat itu, solusi ini tampaknya berhasil ...
sumber
Laporan bug yang saya ajukan ke Apple telah ditandai "Ditutup sebagai duplikat". Saya berharap itu berarti mereka menganggapnya bug. Namun, iOS 7.0.4 tidak memperbaiki bug tersebut.
sumber
Bug tampaknya telah diperbaiki di iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
mengembalikan font.sumber
Saya mengalami crash yang sama yang dulu hanya terjadi pada iOS 7.0.3 & 7.0.4, dan berfungsi dengan sempurna di semua versi lainnya. Setelah begitu banyak penyelidikan, saya mengetahui bahwa @ "HelveticaNeue-Italic" tidak tersedia di versi iOS 7.0.3 & 7.0.4, sehingga saya biasanya mengalami crash di versi tersebut.
Saya telah memperbaiki masalah dengan kode di bawah ini, ini mungkin membantu seseorang yang membutuhkan.
Log kerusakannya adalah:
sumber
Karena tidak ada yang menyebutkan apa pun tentang dukungan miring HelveticaNeue di UIWebView, saya pikir saya akan membagikan temuan saya.
Mulai 7.0.6, huruf miring biasa masih hilang di UIWebView dan tampaknya kembali ke UltraLightItalic dalam kelompok yang sama. Ini terlihat sedikit aneh ketika tepat di sebelah teks HelveticaNeue non-miring berbobot biasa karena jauh lebih ringan.
Solusi saya adalah menggunakan Helvetica biasa, bukan HelveticaNeue, tetapi hanya untuk huruf miring. Jadi jika Anda memiliki CSS yang terlihat seperti ini:
... Anda akan menambahkan dua kelas lain untuk diganti
<i>
dan<em>
:Font miring Helvetica biasa terlihat baik-baik saja dan saya rasa tidak ada yang akan memperhatikan bahwa itu bukan HelveticaNeue.
sumber