2011-07-18 29 views
8

Tôi đang cố gắng để có được một bộ phông chữ Neo Sans Pro hoạt động trên iPhone. Tôi có bốn trọng số: Ánh sáng, Thông thường, Trung bình, In đậm dưới dạng tệp OTF (NeoSansPro-Light.otf, -Regular.otf, v.v.). Các tệp được bao gồm trong bản dựng và được đăng ký trong info.plist.Phông chữ tùy chỉnh không hiển thị chính xác trên iOS

Gọi [UIFont fontNamesForFamilyName:@"Neo Sans Pro"] trả về một mảng có 4 mục nhập, ví dụ: "NeoSansPro-Light".

Tôi có thể truy xuất đối tượng phông chữ cho từng chuỗi này bằng cách sử dụng UIFont fontWithName:size:.

Tuy nhiên, khi tôi vẽ văn bản với chúng, các phiên bản Ánh sáng, Bình thường và Trung bình đều vẽ giống hệt nhau và trông giống như phiên bản Light. Phiên bản Bold vẽ khác nhau.

Theo Sách phông, mỗi tệp phông chữ có chứa các hình tượng khác nhau.

Tôi hoàn toàn bối rối - bất kỳ manh mối nào tôi cần làm?

[Added] Một số nghiên cứu kỹ hơn:

NSArray *fonts = [UIFont fontNamesForFamilyName:@"Neo Sans Pro"]; 

    for (NSString *fname in fonts) { 
     UIFont *font = [UIFont fontWithName:fname size:12.0]; 
     NSLog(@"name: %@ font: %@", fname, font); 
    } 

Chạy mã này cung cấp cho các dữ liệu ghi nhận như sau:

name: NeoSansPro-Light font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Regular font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Medium font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Bold font: <UICFFont: 0xaa06070> font-family: "Neo Sans Pro"; font-weight: bold; font-style: normal; font-size: 12px 

Vì vậy, ba phông chữ hiển thị cùng thực sự là giống nhau. Nhưng có bốn trọng lượng phông chữ và bốn phông chữ trong bản dựng.

+0

Cũng thử dưới dạng tệp TTF, nhưng cũng đã xảy ra –

Trả lời

10

Hình như đây là vấn đề tương tự như ở đây: Including multiple fonts of the same family in an iPad application

Dường như kiến ​​trúc chữ iOS bị nhầm lẫn nếu có nhiều phông chữ trong họ phông chữ giống nhau, và sẽ không trao lại font chữ đúng. Giải pháp là chỉnh sửa thông tin gia đình phông chữ theo cách thủ công (bằng cách sử dụng một cái gì đó như Font Forge cho các giá trị khác nhau.

Ví dụ: Phông chữ Phông chữ Pro (Đặt tên PSNames và TTF) thành "NSP Light". làm tương tự cho Neo Sans Pro Regular -.> NSP thường xuyên, vv

sau đó bạn có thể tham khảo các phông chữ bằng tên gốc ví dụ: "NeoSansPro-Light"

Xấu xí, nhưng nó hoạt động

+2

Một vài giải thích rõ ràng: Trong Font Forge, điều này có sẵn trong trình đơn 'Yếu tố' trong 'Thông tin phông chữ'. Ngoài ra, nó không thực sự quan trọng những gì bạn đặt gia đình Font, về cơ bản bạn chỉ cần thay đổi nó từ gia đình ban đầu để iOS tìm thấy nó bằng tên duy nhất của nó, không phải gia đình/trọng lượng. – alalonde

0

Font rèn nhìn một chút quá nhiều cho tôi vì vậy tôi tạo ra một phương pháp đọc mô tả của các phông chữ trong fontsArray của một cert ain gia đình và trả về phông chữ thích hợp.

- (UIFont*) getFontWithFamilyName:(NSString*)familyName bold:(Boolean)bold italic:(Boolean)italic size:(uint)size { 
    NSArray *fonts = [UIFont fontNamesForFamilyName:familyName]; 
    for (NSString *fname in fonts) { 
     UIFont *font = [UIFont fontWithName:fname size:size]; 
     Boolean isBold = [[font description] rangeOfString:@"bold"].location != NSNotFound; 
     Boolean isItalic = [[font description] rangeOfString:@"italic"].location != NSNotFound; 
     if (isBold == bold && isItalic == italic) { 
      return font; 
     } 
    } 
    //-- font was not found, provide system font bold or normal 
    if (bold) { 
     return [UIFont boldSystemFontOfSize:size]; 
    } else { 
     return [UIFont systemFontOfSize:size]; 
    } 
} 
+0

Bạn đã thử nghiệm điều này với một số phông chữ từ cùng một gia đình đã cài đặt chưa? Vấn đề tôi thấy là [UIFont fontWithName:] không hoạt động, vì vậy giải pháp của bạn sẽ không thể là –

+0

Rõ ràng, điều này hoạt động nếu [UIFont fontWithName:] trả về một cái gì đó. Nếu nó không dành cho bạn, tôi không chắc liệu vấn đề là bạn có nhiều phông chữ của cùng một gia đình. Nhiều phông chữ sẽ trả lại nhiều mục nhập – Elendurwen

+1

Tôi đồng ý rằng [UIFont fontWithName] * nên * trả lại nhiều mục, nhưng vì nó * không * có lỗi trong mã Apple. Do đó làm việc xung quanh ở trên. –

0

Tôi đang sử dụng phông chữ Google có tên Arvo. Nó có các tập tin sau đây:

  • Arvo-Regular.ttf
  • Arvo-Bold.ttf
  • Arvo-BoldItalic.ttf
  • Arvo-Italic.ttf

Những tên là được thêm vào info.plist của ứng dụng của tôi nhưng vì một số lý do, ứng dụng của tôi chỉ có thể đọc các phông chữ in đậm, in đậm và nghiêng. Nó không thể đọc được phông chữ thông thường khi tôi cố gắng tải nó. Tuy nhiên, sau khi in ra tên phông chữ, nó xuất hiện mà Arvo-Regular được công nhận là Arvo trong ứng dụng của tôi.

Các vấn đề liên quan