Điều gì đã xảy ra với “HelveticaNeue-Italic” trên iOS 7.0.3


100

Vừa nâng cấp iPod touch của tôi lên iOS 7.0.3 và "HelveticaNeue-Italic" dường như đã biến mất. Khi tôi truy vấn trên điện thoại với:

[UIFont fontNamesForFamilyName:@"Helvetica Neue"]

Tôi nhận được fontNames sau (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

Khi tôi thực hiện cùng một truy vấn chạy trong trình mô phỏng, tôi nhận được (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

Có ai khác thấy điều này không?

---- Thông tin mới ----

Tôi đã quay lại video WWDC 2013 "Sử dụng Font với Text Kit" và phần thú vị bắt đầu lúc 12:22. Người thuyết trình nói về "MetaFonts" trong OS X làm ví dụ. Những gì anh ấy nói là phông chữ được gọi như:

+ (NSFont *)messageFontOfSize:(CGFloat)fontSize

không được đảm bảo trả lại cùng một phông chữ cơ bản giữa các phiên bản hoặc thậm chí các mục đích sử dụng khác nhau. Ví dụ của anh ấy là Lucinda Grande. Anh ấy dường như không nói rằng việc sử dụng "HelveticaNeue-Italic" có thể biến mất từ ​​phiên bản này sang phiên bản khác.

Vì vậy, tôi đã tạo một thử nghiệm trong iOS 7. Tôi đã tạo phông chữ của mình bằng mã sau:

UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];

Tôi đã nhận được một UIFont trở lại hợp lệ cho fontWithDescriptor và khi tôi truy vấn phông chữ cho fontName với:

[fontWithDescriptor fontName]

Tôi đã trở lại ...

HelveticaNeue-Italic

Đi hình nào ???

Vì vậy, một câu trả lời khả thi cho 7.0.3 dường như là đoạn mã trên.

---- Tinh chỉnh thêm ----

Mặc dù giải pháp đã hoạt động ở trên, tôi không nghĩ rằng nó chính xác về mặt hình thức. Tôi đã chuyển sang giải pháp sau

    UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];

    UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
    UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];

    textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];

Điều này dường như làm tất cả những điều đúng đắn. Tôi đã thử cách tiếp cận trước đó với một họ phông chữ khác và nó có vẻ bị nhầm lẫn với fontName và fontFamily. Hi vọng điêu nay co ich!


Tôi cũng đã thấy điều này. Không biết chuyện gì đã xảy ra, nhưng đó là một sự thụt lùi.
ipodishima

Điều thú vị là Pages trên iOS 7.0.3 hiển thị Helvetica Neue Italic: i.stack.imgur.com/xpJKl.png
Leo Natan

Vì vậy, có vẻ như bạn đã trả lời câu hỏi của tôi bằng câu hỏi và nghiên cứu của riêng bạn, sử dụng trình mô tả phông chữ thực sự hiển thị phông chữ nghiêng trên iPhone 7.0.3 của tôi.
Rick van der Linde.

Đây cũng là một vấn đề trong iOS 7.0.4
s.ka

Câu trả lời:


31

Đây là một lỗi của Apple. Nó đã được giới thiệu trong iOS 7.0.3 và vẫn chưa được sửa lỗi kể từ iOS 7.0.4. Nó dường như đã được sửa trong bản xem trước dành cho nhà phát triển của iOS 7.1. Đây là mã (do Apple cung cấp trong các diễn đàn dành cho nhà phát triển) để giải quyết vấn đề:

#import <CoreText/CoreText.h>

CGFloat size = 14;
UIFont *font = [UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
if (font == nil && ([UIFontDescriptor class] != nil)) {
    font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), size, NULL);
}

Cũng cần lưu ý rằng trong phiên bản hiện tại của Xcode (5.0.1 (5A2053)), phông chữ này không được liệt kê như một tùy chọn trong danh sách Phông chữ thả xuống trong Trình tạo giao diện. Vì vậy, nếu trước đây bạn đã định cấu hình một nhãn với phông chữ này, bạn sẽ nhận thấy rằng ui bị nhầm lẫn và nhãn kết thúc được gán một số phông chữ và kích thước khác trong thời gian chạy (xem ảnh chụp màn hình ui bên dưới). Đối với các nhãn được định cấu hình trong bảng phân cảnh / xibs, bạn sẽ cần đặt lại phông chữ trong mã.

Để tham khảo ở đây là cuộc thảo luận về vấn đề này trong các diễn đàn dành cho nhà phát triển.

nhập mô tả hình ảnh ở đây


Bạn nói rằng bạn đã thay thế tất cả các mục đích sử dụng của mình bằng một thứ khác. Bạn đã thay thế nó bằng gì? Chúng tôi nhận thấy rằng nếu bạn thay thế nó với HelveticaNeue-MediumItalic trong file XIB, chúng tôi có được kết quả không chính xác trên iOS 6 và trước đó vì phông chữ mà dường như đã được giới thiệu trong iOS 7.
GBegen

Tôi đã thay thế nó bằng HelveticaNeue-LightItalic. Không chắc chắn khi nó được giới thiệu mặc dù. Ứng dụng của tôi là iOS7 +
Mike Vosseller

7

Đây là một lỗi trong iOS 7.0.3.

Nếu bạn đang sử dụng HelveticaNeue-Italic một cách rõ ràng, thì bạn có thể tạo nó bằng cách sử dụng giải pháp này:

UIFont* font = (__bridge_transfer UIFont*)CTFontCreateWithName(CFSTR("HelveticaNeue-Italic"), fontSize, NULL);

Tuy nhiên, lưu ý rằng giải pháp này sẽ chỉ hoạt động trên iOS 7; nó không thể triển khai cho iOS 6 (vì CTFontRefUIFontkhông được bắc cầu miễn phí trên iOS 6). Tuy nhiên, trên iOS 6, bạn chỉ có thể sử dụng mã tra cứu phông chữ thông thường của mình.


4

Đó là niềm tin của tôi rằng nó là một lỗi. Tôi đã gửi nó như vậy cho Apple. Thật đáng buồn cho tôi, ứng dụng của tôi hiện đang bị lỗi. Phông chữ được sử dụng trong thư viện của bên thứ 3 mà tôi đang sử dụng. Nhiều người trên Twitter đang báo cáo vấn đề.


1
FYI: Tôi vừa thử nghiệm và lỗi vẫn tồn tại trong iOS 7.0.4.
David Lari

3

Nếu bạn đang truy cập động vào phông chữ in nghiêng thì thay vì truy cập phông chữ theo tên, hãy [UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f] sử dụng [UIFont italicSystemFontOfSize:15.0f]điều này đối với tôi.


Đây có lẽ là công việc sạch sẽ nhất về vấn đề này. Nếu yêu cầu hỗ trợ iOS 6, bạn có thể thử chạy fontWithName:size:trước và nếu có kết quả nil, hãy chạy italicSystemFontOfSize:, thao tác này sẽ luôn trả về thứ gì đó và ít nhất là tránh được sự cố.
SaltyNuts

2

Tôi hiện không tìm thấy phiên nhưng họ nói điều gì đó rằng bạn không thể tin tưởng vào các phông chữ có sẵn trên iOS7 nữa. Chúng thậm chí có thể thay đổi trong suốt thời gian tồn tại của ứng dụng của bạn. Về cơ bản, điều đó có nghĩa là: Khi bạn chỉ định phông chữ trong ứng dụng của mình, bạn đang gặp rắc rối, hãy sử dụng trình mô tả phông chữ hoặc phông chữ ưa thích để thay thế!


2
Đối sánh gần nhất mà tôi có thể tìm thấy là asciiwwdc.com/2013/sessions/223 , nhưng có vẻ như chúng đang đề cập đến phông chữ có thể tải xuống, không phải phông chữ do hệ thống cung cấp.
Hilton Campbell

Xem thông tin mới ở trên. Tôi nghĩ những gì người thuyết trình đang nói là bạn không thể tin tưởng vào việc ánh xạ "MetaFonts" tới các phông chữ cơ bản giống nhau giữa các phiên bản hoặc thậm chí sử dụng. Tôi không nghĩ rằng anh ấy đang nói rằng thậm chí có khả năng một cái gì đó như "HelveticaNeue-Italic" có thể biến mất.
Scott Sarnikowski

1

Tôi đã tìm thấy một giải pháp khác có vẻ hiệu quả. Tôi đã đăng xuất một cuộc gọi tới

[[UIFont italicSystemFontOfSize:12.0] fontName]

để xem phông chữ nghiêng hệ thống thực tế đang được sử dụng là gì và nó trả về ".HelveticaNeueInterface-ItalicM3". Một thử nghiệm đơn giản cho thấy rằng việc sử dụng

[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]

làm! So sánh chúng một cách trực quan, phông chữ được trả về bởi lệnh gọi trên dường như hoàn toàn giống với phông chữ 'HelveticaNeue-Italic' ban đầu.

Vấn đề này gần như chắc chắn là một lỗi ... Helvetica Neue là phông chữ mặc định trong iOS 7, vì vậy không nên thiếu phông chữ trong họ đó. Mọi thứ hoạt động tốt trong Xcode v.5.0, nhưng ngay sau khi nâng cấp lên 5.0.1, vấn đề này bắt đầu xuất hiện. Tôi đã gửi một thông báo lỗi với Apple. Cho đến lúc đó, giải pháp này dường như hoạt động ...


1

Báo cáo lỗi mà tôi gửi cho Apple đã được đánh dấu là "Đã đóng là trùng lặp". Tôi hy vọng điều đó có nghĩa là họ coi đó là một lỗi. Tuy nhiên, iOS 7.0.4 không sửa được lỗi.


1
Tôi nhận được câu trả lời tương tự. Hy vọng họ sửa chữa nó.
Scott Sarnikowski

1

Lỗi này dường như đã được sửa trong iOS 7.1 beta 1. [UIFont fontWithName:@"HelveticaNeue-Italic" size:size];trả về một phông chữ.


Tin tốt, nhưng điều đó vẫn theo NDA.
Vincent Tourraine

9
Tôi sẽ chấp nhận rủi ro đó.
Leo Natan

0

Tôi đã gặp sự cố tương tự, thường chỉ xảy ra với iOS 7.0.3 & 7.0.4 và hoạt động hoàn hảo trong tất cả các phiên bản khác. Sau rất nhiều điều tra, tôi biết rằng @ "HelveticaNeue-Italic" không có sẵn trong các phiên bản iOS 7.0.3 & 7.0.4, vì vậy tôi đã từng gặp sự cố trên trong các phiên bản đó.

Tôi đã khắc phục sự cố với mã dưới đây, điều này có thể hữu ích cho ai đó đang cần.

self.headerFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:16.0f];
if (self.headerFont == nil) {
    self.headerFont = [UIFont fontWithName:@"HelveticaNeue" size:16.0f];
}

Nhật ký sự cố là:

[__NSCFConstantString pointSize]: unrecognized selector sent to instance 

-1

Vì không ai đề cập đến bất cứ điều gì về hỗ trợ in nghiêng HelveticaNeue trong UIWebView, tôi nghĩ tôi sẽ chia sẻ những phát hiện của mình.

Kể từ 7.0.6, chữ nghiêng thông thường vẫn bị thiếu trong UIWebView và dường như trở lại với UltraLightItalic trong cùng một họ. Điều này trông hơi kỳ lạ khi nó nằm ngay bên cạnh văn bản HelveticaNeue không nghiêng trọng lượng thông thường vì nó nhẹ hơn rất nhiều.

Cách giải quyết của tôi là sử dụng Helvetica thông thường thay vì HelveticaNeue, nhưng chỉ dành cho chữ in nghiêng. Vì vậy, nếu bạn có CSS ​​trông như thế này:

.myCssClass {
    font-family:HelveticaNeue;
    /* etc, etc */
}

... bạn sẽ thêm hai lớp khác để ghi đè <i><em>:

.myCssClass i  { font-family:Helvetica; }
.myCssClass em { font-family:Helvetica; }

Phông chữ nghiêng Helvetica thông thường trông đẹp và tôi không nghĩ rằng có ai sẽ nhận thấy rằng nó không phải là HelveticaNeue.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.