Tôi có thể nhúng phông chữ tùy chỉnh trong ứng dụng iPhone không?


772

Tôi muốn có một ứng dụng bao gồm một phông chữ tùy chỉnh để hiển thị văn bản, tải nó và sau đó sử dụng nó với các UIKityếu tố tiêu chuẩn như UILabel. Điều này có thể không?


5
Trong một trong những bài giảng về CS193p (Phát triển ứng dụng iPhone) tại Stanford, Evan lưu ý rằng việc cài đặt phông chữ của riêng bạn trên thiết bị là rất nhiều công việc, điều đó ít nhất có nghĩa là có thể :-)
Ilya Birman

2
iPhone 3.2 cho phép phông chữ tùy chỉnh, nhưng chỉ có iPad (xem câu trả lời bên dưới)
samvermette

6
Tôi đã sử dụng hình ảnh cuối cùng.
Airsource Ltd

2
wow ... sau tất cả những điều đó, câu trả lời vẫn là hình ảnh ... không thể tin được. Tôi đã thực sự hy vọng cho việc thực hiện vững chắc các phông chữ tùy chỉnh với khả năng tương tự như phông chữ hệ thống. than ôi ...
d2burke

1
Tôi đã cắt giảm đáng kể câu hỏi ban đầu để phản ánh thập kỷ đã trôi qua kể từ khi tôi hỏi nó. Tôi khuyến khích mọi người khác cắt bình luận và câu trả lời của họ một cách thích hợp.
Airsource Ltd

Câu trả lời:


646

iOS 3.2 trở lên hỗ trợ này. Trực tiếp từ tài liệu mới trong iPhone OS 3.2 :

Các
ứng dụng hỗ trợ phông chữ tùy chỉnh Các ứng dụng muốn sử dụng phông chữ tùy chỉnh giờ đây có thể bao gồm các phông chữ đó trong gói ứng dụng của chúng và đăng ký các phông chữ đó với hệ thống bằng cách đưa khóa UIAppFonts vào tệp Info.plist của chúng. Giá trị của khóa này là một chuỗi các chuỗi xác định các tệp phông chữ trong gói của ứng dụng. Khi hệ thống nhìn thấy khóa, nó sẽ tải các phông chữ được chỉ định và cung cấp chúng cho ứng dụng.

Khi các phông chữ đã được đặt trong Info.plist, bạn có thể sử dụng các phông chữ tùy chỉnh của mình như bất kỳ phông chữ nào khác trong IB hoặc theo chương trình.

Có một chủ đề đang diễn ra trên Diễn đàn Nhà phát triển của Apple:
https://devforums.apple.com/thread/37824 (yêu cầu đăng nhập)

Và đây là một hướng dẫn 3 bước đơn giản và tuyệt vời về cách đạt được điều này (loại bỏ liên kết bị hỏng)

  1. Thêm tệp phông chữ tùy chỉnh vào dự án của bạn bằng Xcode làm tài nguyên
  2. Thêm một khóa vào Info.plisttập tin của bạn được gọi là UIAppFonts.
  3. Biến khóa này thành một mảng
  4. Đối với mỗi phông chữ bạn có, hãy nhập tên đầy đủ của tệp phông chữ của bạn (bao gồm cả phần mở rộng) làm các mục cho UIAppFontsmảng
  5. Tiết kiệm Info.plist
  6. Bây giờ trong ứng dụng của bạn, bạn chỉ cần gọi [UIFont fontWithName:@"CustomFontName" size:12]để có được phông chữ tùy chỉnh để sử dụng với UILabelsUITextViews , v.v.

Ngoài ra: Đảm bảo các phông chữ nằm trong Tài nguyên Gói Sao chép của bạn.


14
Dưới đây là hướng dẫn từng bước cho iOS4: blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs

15
Hướng dẫn này là rất tốt. shang-liang.com/blog/custom-fonts-in-ios4 Quan trọng, đối số NSString thành [UIFont fontWithName: ...] là tên hệ điều hành cho phông chữ thay vì tên tệp.
Willster

152
Trước khi bất cứ ai khác dành 3 giờ để cài đặt fontforge để tìm tên bài viết thực sự của phông chữ mà iOS yêu cầu. Tôi sẽ chỉ ra rằng bạn chỉ cần nhấn Cmd + I trên phông chữ trong sách phông chữ để tìm thông tin này.
Daniel Wood

42
Sau khi vật lộn để có được tên phông chữ phù hợp, tôi chỉ liệt kê ra các phông chữ được cài đặt và tìm thấy nó. Rất hữu ích. Đây là mã: for (NSString * FamilyName trong [UIFont FamilyNames]) {NSLog (@ "Family% @", familyName); NSLog (@ "Tên =% @", [Phông chữ UIFontNamesForF FamilyName: FamilyName]); }
Steve Potter

26
Nếu mã của bạn không hoạt động, hãy đảm bảo rằng bạn đã tìm thấy tệp phông chữ xuất hiện trong "Xây dựng giai đoạn" -> "Sao chép các nhóm liên kết"
Mickey

299

Chỉnh sửa: Kể từ iOS 3.2, chức năng này được tích hợp. Nếu bạn cần hỗ trợ trước 3.2, bạn vẫn có thể sử dụng giải pháp này.

Tôi đã tạo một mô-đun đơn giản giúp mở rộng UILabelvà xử lý tải các tệp .ttf. Tôi đã phát hành nó mã nguồn mở theo giấy phép Apache và đưa nó lên github Tại đây.

Các tập tin quan trọng là FontLabel.hFontLabel.m.

Nó sử dụng một số mã từ câu trả lời của Genericrich .

Duyệt nguồn ở đây.

HOẶC LÀ

  • Sao chép tập tin phông chữ của bạn vào tài nguyên

  • Thêm một khóa vào Info.plisttệp của bạn được gọi là UIAppFonts. ("Phông chữ được cung cấp bởi ứng dụng)

  • Biến khóa này thành một mảng

  • Đối với mỗi phông chữ bạn có, hãy nhập tên đầy đủ của tệp phông chữ của bạn (bao gồm cả phần mở rộng) làm các mục vào mảng UIAppFonts

  • Tiết kiệm Info.plist

  • Bây giờ trong ứng dụng của bạn, bạn chỉ có thể gọi [UIFont fontWithName:@"CustomFontName" size:15]để có được phông chữ tùy chỉnh để sử dụng với bạn UILabelsUITextViews, vv ...

Để biết thêm thông tin


2
Tôi đã thử sử dụng mã của bạn nhưng nó gặp sự cố khá thường xuyên tùy thuộc vào phông chữ. Ví dụ: hãy thử sử dụng phông chữ Châu Phi hoặc Tiki từ đây fontspace.com/carget/tiki .
Không gian thứ

2
Thư viện này hoạt động tuyệt vời. Tôi cần giúp đỡ với khoảng cách dọc mặc dù. Không thể tìm ra cách để làm điều đó. Vì vậy, tôi có thông báo này.numberOfLines = 3; Làm cách nào để kiểm soát khoảng cách dọc giữa dòng 1 và dòng 2 và dòng 3? Cảm ơn bạn, Tee
teepusink

2
@commanda Xin chào commanda, liên kết bạn cung cấp trong câu trả lời của bạn dường như không có.
Parth Bhatt

5
@ParthBhatt Bạn nên sử dụng giải pháp được cung cấp trong stackoverflow.com/a/2616101/21447 thay vì FontLabel, vì chức năng này hiện được cung cấp bởi CocoaTouch.
commanda

2
@ParthBhatt: Tôi không biết tại sao repo không còn được lưu trữ tại zynga, nhưng nó có sẵn tại github.com/kballard/fontlabel
Lily Ballard

116

Có một cách đơn giản để sử dụng phông chữ tùy chỉnh trong iOS 4 .

  1. Thêm tệp phông chữ của bạn (ví dụ Chalkduster.ttf:) vào thư mục Tài nguyên của dự án trong XCode.
  2. Mở info.plistvà thêm một khóa mới được gọi là UIAppFonts. Loại khóa này phải là mảng.
  3. Thêm tên phông chữ tùy chỉnh của bạn vào mảng này bao gồm cả phần mở rộng ( Chalkduster.ttf).
  4. Bây giờ bạn có thể sử dụng [UIFont fontWithName:@"Chalkduster" size:16]trong ứng dụng của bạn.

Thật không may, IB không cho phép khởi tạo nhãn bằng phông chữ tùy chỉnh. Xem câu hỏi này để giải quyết vấn đề này. Giải pháp yêu thích của tôi là sử dụng UILabellớp con tùy chỉnh :

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end

3
Điều này dường như được hỗ trợ trở lại 3.2, không chỉ 4.0+
Jesse Rusak

1
Cảm ơn! Vấn đề tôi gặp phải là các phông chữ tùy chỉnh dường như hơi lệch một chút (không gian thêm bên dưới) so với các đối tác tích hợp của chúng. Tôi đã thử sử dụng repo FontLabel từ GitHub, giúp một số thời gian, nhưng không phải tất cả thời gian.
Joe D'Andrea

12
Cần lưu ý rằng chuỗi bạn chuyển đến hàm tạo UIFont KHÔNG phải là tên tệp trừ phần mở rộng của tên của phông chữ. Tôi gặp vấn đề khi tải một phông chữ với tên tệp mà tôi đã rút ngắn. Khi tôi sử dụng toàn bộ tên phông chữ có trong tệp, phông chữ được tải tốt.
slayton

5
Những gì slayton chỉ nói là quan trọng. [UIFont fontWithName: mong đợi "Tên đầy đủ" của phông chữ, có thể nhìn thấy bằng cách mở nó trong Sách phông chữ và chọn: Xem trước -> Hiển thị thông tin phông chữ
nam châm điện

51

Trong Info.plist, thêm mục "Phông chữ được cung cấp bởi ứng dụng" và bao gồm tên phông chữ dưới dạng chuỗi:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Sau đó kiểm tra để đảm bảo phông chữ của bạn được bao gồm bằng cách chạy:

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
         NSLog(@"%@", fontName);
    }
}

Lưu ý rằng tên tệp ttf của bạn có thể không giống với tên bạn sử dụng khi bạn đặt phông chữ cho nhãn của mình (bạn có thể sử dụng mã ở trên để lấy tham số "fontWithName"):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];

36

chỉnh sửa: Câu trả lời này không còn tồn tại kể từ iOS3.2; sử dụng UIAppFont

Cách duy nhất tôi có thể tải thành công các tùy chỉnh UIFontlà thông qua khung dịch vụ Đồ họa riêng.

Sau đây sẽ tải tất cả các .ttfphông chữ trong gói chính của ứng dụng:

BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    return newFontCount;
}

Khi các phông chữ được tải, chúng có thể được sử dụng giống như các phông chữ do Apple cung cấp:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

Dịch vụ đồ họa thậm chí có thể được tải trong thời gian chạy trong trường hợp API biến mất trong tương lai:

#import <dlfcn.h>
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
    if (frameworkPath) {
        void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
        if (graphicsServices) {
            BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
            if (GSFontAddFromFile)
                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        }
    }
    return newFontCount;
}

lưu ý với những người thắc mắc, điều này không hoạt động, nhưng bạn sẽ cần gọi loadFont ngay trước khi sử dụng phông chữ - dường như chúng không được tải trong suốt ứng dụng
pixel

Trong OS 3.0, bạn chắc chắn cần sử dụng ví dụ thứ hai thứ hai, đừng quên nhập. Làm việc khá tốt cho tôi.
M. Ryan

Một lưu ý khác - đây là một khung riêng tư và tự động tải nó ... cả hai đều có thể sẽ dừng việc chấp nhận ứng dụng của bạn vào AppStore.
pixel

Kết luận là gì? Những lựa chọn thay thế cho phương pháp này?
Raj Pawan Gumdal

1
Cũng nên lưu ý rằng [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];trả về 0 chiều rộng và chiều cao cho bất kỳ phông chữ tùy chỉnh nào tôi đã thử.
Luke Mcneice

34

Với iOS 8+ và Xcode 6+ bạn có thể thực hiện điều này một cách dễ dàng. Dưới đây là các bước:

1) Kéo và thả phông chữ của bạn vào Xcodethư mục Tệp hỗ trợ. Đừng quên đánh dấu ứng dụng của bạn tại phần Thêm vào mục tiêu . Từ thời điểm này, bạn có thể sử dụng phông chữ này IBvà chọn nó từ phông chữ pallet.

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

2) Để làm cho phông chữ này có sẵn trong thiết bị của bạn, hãy mở info.plistvà thêm Fonts provided by applicationkhóa. Nó sẽ chứa khóa Mục 0, bạn phải thêm tên phông chữ của mình làm giá trị. Tên phông chữ có thể thay đổi từ tên tập tin phông chữ của bạn. Nhưng trước tiên, hãy cố gắng thêm tên tệp của bạn trong hầu hết các trường hợp công việc này.

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

Nếu không, bài viết này luôn giúp tôi.

Đây là đoạn mã nhanh chóng từ bài viết này để giúp bạn tìm tên phông chữ của mình.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

BIÊN TẬP

Tôi muốn đề cập rằng, bạn cần thêm các tệp phông chữ vào Giai đoạn xây dựng của mục tiêu , Sao chép tài nguyên gói . Không có nó, bạn sẽ không thấy phông chữ của mình trên thiết bị. Và nó có thể dẫn đến hành vi bất ngờ.

Ví dụ: tôi gặp một bug, khi UITextFieldcó phông chữ tùy chỉnh, nhưng phông chữ này không có trong Tài nguyên gói sao chép . Và khi tôi phân biệt viewcontrollervới điều này textfield, có độ trễ khoảng 4 giây trước khi viewDidLoadchức năng được gọi. Giải quyết các rắc rối về phông chữ đã loại bỏ sự chậm trễ này. Vì vậy, đề nghị kiểm tra nó hai lần. (rdar: // 20028250) Btw, tôi không thể tạo lại lỗi, nhưng tôi chắc chắn rằng vấn đề là do phông chữ.


1
Chỉ cần một lưu ý. Phông chữ tùy chỉnh không có sẵn trong LaunchScreen ngay cả khi được định cấu hình đúng trong IB. Mà có thể là logic.
Rivera

@Rivera wow, lưu ý tuyệt vời! Không biết điều đó. Thay thế có thể là sử dụng UIImage với văn bản thay thế, tôi nghĩ vậy.
Dima Deplov

@Rivera, cảm ơn vì thông tin đó - nó được ghi lại ở bất cứ đâu? Tôi đã đi qua các bước liên tục nghĩ rằng tôi đã bỏ lỡ một bước.
spongessuck

@spongessuck không chắc chắn về câu hỏi của bạn, nhưng có một số nhà phát triển
liệu.apple.com / l Library / ios / document /StringsTextFonts / Lỗi

27

Tôi đã làm điều này như thế này:

Tải phông chữ:

- (void)loadFont{
  // Get the path to our custom font and create a data provider.
  NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"]; 
  CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);

  // Create the font with the data provider, then release the data provider.
  customFont = CGFontCreateWithDataProvider(fontDataProvider);
  CGDataProviderRelease(fontDataProvider); 
}

Bây giờ, trong của bạn drawRect:, làm một cái gì đó như thế này:

-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
    // Get the context.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    // Set the customFont to be the font used to draw.
    CGContextSetFont(context, customFont);

    // Set how the context draws the font, what color, how big.
    CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
    UIColor * strokeColor = [UIColor blackColor];
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
    CGContextSetFontSize(context, 48.0f);

    // Create an array of Glyph's the size of text that will be drawn.
    CGGlyph textToPrint[[self.theText length]];

    // Loop through the entire length of the text.
    for (int i = 0; i < [self.theText length]; ++i) {
        // Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
        textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
    }
    CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
    CGContextSetTextMatrix(context, textTransform);
    CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}

Về cơ bản, bạn phải thực hiện một số lực lượng mạnh mẽ lặp lại văn bản và tìm kiếm số ma thuật để tìm phần bù của bạn (ở đây, xem tôi sử dụng 29) trong phông chữ, nhưng nó hoạt động.

Ngoài ra, bạn phải đảm bảo phông chữ có thể nhúng hợp pháp. Hầu hết không có và có luật sư chuyên về loại điều này, vì vậy được cảnh báo.


1
Tôi chắc chắn rằng nó hoạt động tốt, nhưng tôi (thực sự) không muốn viết công cụ bố cục của riêng mình để xử lý mọi thứ UILabel và UITextView hiện đang làm cho tôi - đặc biệt là gói từ, định vị và chỉnh sửa.
Airsource Ltd

1
AFAICS, điều này chỉ hoạt động với các ký tự viết hoa, do đó, cuộc gọi 'chữ hoa'.
Martin Côte

2
Tôi đang từ chối vì thủ thuật "số ma thuật" là một hack thuần túy không thực sự hoạt động. Giải pháp thực sự là lấy bảng cmap từ tệp TTF.
Martin Côte

1
Đây là một thông tin gọn gàng về việc sử dụng phông chữ trực tiếp với Core Graphics. Chỉ cần cập nhật cho độc giả trong tương lai: Trong các hệ điều hành mới hơn, người ta có thể và nên sử dụng Core Text. Ngoài ra, người ta có thể sử dụng CGContextShowTextAtPoint()- mặc dù nó không hoạt động với UTF-8.
Ivan Vučica

20

Có, bạn có thể bao gồm các phông chữ tùy chỉnh. Tham khảo tài liệu về UIFont, cụ thể, fontWithName:size:phương pháp.

1) Đảm bảo bạn bao gồm phông chữ trong thư mục tài nguyên của bạn.

2) "Tên" của phông chữ không nhất thiết phải là tên tệp.

3) Đảm bảo bạn có quyền hợp pháp để sử dụng phông chữ đó. Bằng cách đưa nó vào ứng dụng của bạn, bạn cũng phân phối nó và bạn cần có quyền làm điều đó.


Bạn đã thực sự làm điều này thành công chưa? Tôi không thể làm cho nó hoạt động và googling chỉ tìm thấy những người khác đã thử nó và thất bại.
Airsource Ltd

Đúng. Tôi có. Một lần nữa, hãy chắc chắn rằng bạn đang sử dụng tên phông chữ thích hợp.
Tháng Tám

1
Khi bạn nói "Tên" của phông chữ không nhất thiết phải là tên tệp "... làm thế nào để tìm đúng tên?
Keith Fitzgerald

7
Vâng, câu trả lời này là sai. Bạn không thể làm điều này ra khỏi hộp.
Jonathan Sterling

Cập nhật iOS 9, tài liệu UIFont không đề cập bất cứ điều gì về phông chữ tùy chỉnh
Cbas

20

Nếu bạn đang sử dụng xcode 4.3, bạn phải thêm phần fontbên Build Phasedưới Copy Bundle Resources, theo https://stackoverflow.com/users/1292829/arne trong chuỗi, Phông chữ tùy chỉnh Xcode 4.3 . Điều này làm việc cho tôi, đây là các bước tôi đã thực hiện để phông chữ tùy chỉnh hoạt động trong ứng dụng của mình:

  1. Thêm phông chữ cho dự án của bạn. Tôi đã kéo và thả các tệp OTF(hoặc TTF) vào một nhóm mới do tôi tạo và chấp nhận lựa chọn của xcode copying the files over to the project folder.
  2. Tạo UIAppFontsmảng với phông chữ của bạn được liệt kê dưới dạng các mục trong mảng. Chỉ là names, không phải phần mở rộng (ví dụ " GothamBold", " GothamBold-Italic").
  3. Nhấp vào project nameđường ở phía trên cùng Project Navigatorbên trái của màn hình.
  4. Nhấp vào Build Phasestab xuất hiện trong khu vực chính của xcode.
  5. Mở rộng phần " Copy Bundle Resources" và nhấp vào "+"để thêm phông chữ.
  6. Chọn tệp phông chữ từ trình điều hướng tệp bật mở khi bạn nhấp vào "+".
  7. Làm điều này cho mọi phông chữ bạn phải add to the project.

12

Đây là hướng dẫn từng bước làm thế nào để làm điều đó. Không cần thêm thư viện hoặc bất kỳ mã hóa đặc biệt.

http://shang-liang.com/blog/custom-fonts-in-ios4/

Hầu hết thời gian vấn đề là với phông chữ không phải là phương pháp. Cách tốt nhất để làm điều đó là sử dụng một phông chữ chắc chắn sẽ hoạt động, như verdana hoặc geogia. Sau đó thay đổi sang phông chữ dự định. Nếu nó không hoạt động, có thể tên phông chữ không đúng hoặc phông chữ không phải là một phông chữ được hình thành tốt.


12

Rất dễ dàng để thêm một phông chữ mới trên Ứng dụng iOS hiện tại của bạn.

Bạn chỉ cần thêm phông chữ, ví dụ font.ttf vào Thư mục tài nguyên của bạn.

Mở ứng dụng của bạn info.plist. Thêm một hàng mới là "Phông chữ được cung cấp bởi ứng dụng" và nhập tên phông chữ là font.ttf.

Và khi cài đặt phông chữ, hãy làm setFont:"corresponding Font Name"

Bạn có thể kiểm tra xem phông chữ của bạn có được thêm hay không NSArray *check = [UIFont familyNames];.

Nó trả về tất cả các phông chữ ứng dụng của bạn hỗ trợ.


11

Tôi muốn giới thiệu theo một trong những hướng dẫn ngắn yêu thích của tôi ở đây: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ từ đó thông tin này xuất hiện.

Bước 1 - Kéo .ttf hoặc .otf của bạn từ Finder vào Dự án của bạn

LƯU Ý - Đảm bảo nhấp vào hộp để 'Thêm vào mục tiêu' trên mục tiêu ứng dụng chính của bạn

Kéo tập tin phông chữ vào dự án của bạn và nhấp để thêm chúng vào mục tiêu của bạn

Nếu bạn quên nhấp để thêm nó vào mục tiêu của mình thì hãy nhấp vào tệp phông chữ trong phân cấp dự án của bạn và trên bảng bên phải, nhấp vào mục tiêu ứng dụng chính trong phần Thành viên mục tiêu

Làm cách nào để thêm phông chữ vào mục tiêu ứng dụng nếu bạn quên

Để đảm bảo phông chữ của bạn là một phần của mục tiêu ứng dụng của bạn, hãy đảm bảo chúng xuất hiện trong Tài nguyên gói sao chép của bạn trong giai đoạn xây dựng

Cách kiểm tra tài nguyên để xem phông chữ có phải là một phần của mục tiêu ứng dụng không

Bước 2 - Thêm tên tệp phông chữ vào Plist của bạn

Chuyển đến Thuộc tính mục tiêu iOS tùy chỉnh trong Phần thông tin của bạn và thêm khóa vào các mục trong phần đó được gọi Fonts provided by application(bạn sẽ thấy nó xuất hiện dưới dạng tùy chọn khi bạn nhập và nó sẽ tự thiết lập thành một mảng. Nhấp vào mũi tên nhỏ để mở các mục mảng và nhập tên của các tệp .ttf hoặc .otf mà bạn đã thêm để cho ứng dụng của bạn biết rằng đây là các tệp phông chữ bạn muốn có sẵn

LƯU Ý - Nếu ứng dụng của bạn gặp sự cố ngay sau bước này, hãy kiểm tra chính tả của bạn trên các mục bạn thêm vào đây

ví dụ plist với phông chữ tùy chỉnh được thêm vào

Bước 3 - Tìm hiểu tên các phông chữ của bạn để bạn có thể gọi chúng

Thông thường, tên phông chữ mà ứng dụng của bạn nhìn thấy khác với những gì bạn nghĩ nó dựa trên tên tệp cho phông chữ đó, hãy đặt mã này vào mã của bạn và xem qua nhật ký mà ứng dụng của bạn thực hiện để xem tên phông chữ nào sẽ gọi trong mã của bạn

Nhanh

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

Mục tiêu C

for (NSString* family in [UIFont familyNames]){
    NSLog(@"%@", family);
    for (NSString* name in [UIFont fontNamesForFamilyName: family]){
        NSLog(@"  %@", name);
    }
}

Nhật ký của bạn sẽ trông giống như thế này:

Ví dụ về tìm kiếm nhật ký để tìm tên phông chữ

Bước 4 - Sử dụng phông chữ tùy chỉnh mới của bạn bằng tên từ Bước 3

Nhanh

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

Mục tiêu C

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];

10

Tìm TTF trong công cụ tìm và "Nhận thông tin". Trong tiêu đề "Tên đầy đủ:" nó đã cho tôi một tên mà sau đó tôi đã sử dụng fontWithName(tôi chỉ sao chép và dán tên chính xác, trong trường hợp này không cần mở rộng '.ttf').


8

Vẫn chưa ra mắt, nhưng phiên bản tiếp theo của cocos2d (khung trò chơi 2d) sẽ hỗ trợ phông chữ bitmap có độ dài thay đổi như bản đồ nhân vật.

http://code.google.com.vn/p/cocos2d-iphone/issues/detail?id=317

Tác giả không có ngày phát hành đóng đinh cho phiên bản này, nhưng tôi đã thấy một bài đăng cho biết nó sẽ có trong một hoặc hai tháng tới.


8

Một thông báo quan trọng: Bạn nên sử dụng "Tên PostScript" được liên kết với phông chữ, không phải tên đầy đủ hoặc Tên gia đình của nó. Tên này thường có thể khác với tên bình thường của phông chữ.


7

làm theo bước này

1) Sao chép phông chữ của bạn trong dự án của bạn

2) mở .plisttệp của bạn ở chế độ mã nguồn ... (Lưu ý- Không mở info.plist)

3) Trước đó - Nhấp chuột phải vào phông chữ của bạn và mở nó trong fontforge hoặc trình chỉnh sửa tương tự và installnó trong hệ thống của bạn, Nó phải làinstall

4) Nhập cái này

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5) Nhập mã này vào class .m

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

Ở đây lblPoints sẽ được thay đổi theo UILabel

Làm xong!! Nếu vẫn phông chữ của bạn không hoạt động, trước tiên hãy kiểm tra khả năng tương thích phông chữ của bạn


1
Tại sao không mở info.plist?
Raptor

Tại sao không gian ở giữa Myston & Pro ở điểm thứ 5 khi không có điểm nào trong Plist ở điểm 4?
jayant rawat

@jayantrawat Tên phông chữ của nó được hiển thị trong hệ thống sau khi chúng tôi cài đặt phông chữ và .plist là tên của tệp phông chữ [.ttl hoặc otf]
Kirtikumar A.

@KirtikumarA. có, nó đã được thực hiện thành công trong ứng dụng ..
jayant rawat

@jayantrawat nếu giải pháp của tôi giúp thì yêu cầu bạn đưa ra câu trả lời để người dùng khác có thể giúp đỡ theo cách tương tự
Kirtikumar A.

6

Có lẽ tác giả đã quên đặt cho phông chữ một tên Mac FOND ?

  1. Mở phông chữ trong FontForge, sau đó vào Element> Thông tin phông chữ
  2. Có một tùy chọn "Mac" nơi bạn có thể đặt tên FOND.
  3. Trong Tệp> Xuất Phông chữ, bạn có thể tạo ttf mới

Bạn cũng có thể thử tùy chọn "Apple" trong hộp thoại xuất.

TUYÊN BỐ TỪ CHỐI : Tôi không phải là nhà phát triển iPhone!


6

Tôi đã thử các đề xuất khác nhau trên trang này trên iOS 3.1.2 và đây là những kết luận của tôi:

Chỉ cần sử dụng [UIFont fontWithName:size:]với các phông chữ trong thư mục Tài nguyên sẽ không hoạt động, ngay cả khi tên FOND được đặt bằng FontForge.

[UIFont fontWithName:size:]sẽ hoạt động nếu phông chữ được tải trước bằng GSFontAddFromFile. Nhưng GSFontAddFromFilekhông phải là một phần của iOS 3.1.2 nên nó phải được tải động theo mô tả của @rpetrich.


5

Tra cứu ATSApplicationFontsPath

Một mục nhập đơn giản cho phép bạn đưa (các) tệp phông chữ vào thư mục tài nguyên ứng dụng của bạn và chúng "chỉ hoạt động" trong ứng dụng của bạn.


Bạn đã thử điều này trên thiết bị? Tôi không có niềm vui và googling gợi ý rằng mục nhập này không được hỗ trợ trên iPhone, mặc dù nó được ghi nhận cho hệ điều hành iPhone.
Airsource Ltd

1
Xin lỗi, hiện tại tôi chỉ sử dụng nó trong một ứng dụng OS X.
Matt Sephton

5

Tôi đã kết hợp một số lời khuyên trên trang này thành một cái gì đó phù hợp với tôi trên iOS 5.

Đầu tiên, bạn phải thêm phông chữ tùy chỉnh vào dự án của bạn. Sau đó, bạn cần làm theo lời khuyên của @iPhoneDev và thêm phông chữ vào tệp info.plist của bạn.

Sau khi bạn làm điều đó, điều này hoạt động:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Tuy nhiên, bạn cần biết tên Postcript của phông chữ của bạn. Chỉ cần làm theo lời khuyên của @Daniel Wood và nhấn lệnh-i khi bạn đang ở trong FontBook.

Sau đó, thưởng thức phông chữ tùy chỉnh của bạn.


5

Trước tiên, thêm phông chữ ở định dạng .odt vào tài nguyên của bạn, trong trường hợp này, chúng tôi sẽ sử dụng DINEngschriftStd.otf, sau đó sử dụng mã này để gán phông chữ cho nhãn

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Để đảm bảo phông chữ của bạn được tải vào dự án, chỉ cần gọi

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

Trên .plist bạn phải khai báo phông chữ. Chỉ cần thêm bản ghi 'Phông chữ được cung cấp bởi ứng dụng' và thêm chuỗi 0 mục với tên của phông chữ (DINEngschriftStd.otf)


5

Đối với iOS 3.2 trở lên: Sử dụng các phương thức được cung cấp bởi một số ở trên, đó là:

  1. Thêm tệp phông chữ của bạn (ví dụ: Chalkduster.ttf ) vào thư mục Tài nguyên của dự án trong XCode.
  2. Mở info.plist và thêm một khóa mới gọi là UIAppFonts. Loại khóa này phải là mảng.
  3. Thêm tên phông chữ tùy chỉnh của bạn vào mảng này bao gồm cả phần mở rộng (" Chalkduster.ttf ").
  4. Sử dụng [UIFont fontWithName:@"Real Font Name" size:16]trong ứng dụng của bạn.

NHƯNG "Tên phông chữ thực" không phải lúc nào cũng là tên bạn thấy trong Fontbook. Cách tốt nhất là hỏi thiết bị của bạn xem phông chữ nào và tên chính xác là gì.

Tôi sử dụng uifont-name-Grabber được đăng tại: uifont-name-Grabber

Chỉ cần thả các phông chữ bạn muốn vào dự án xcode, thêm tên tệp vào phần chính của nó và chạy nó trên thiết bị bạn đang xây dựng, nó sẽ gửi email cho bạn một danh sách phông chữ hoàn chỉnh bằng cách sử dụng các tên mà bạn UIFont fontWithName:mong đợi.


5

Giải pháp tốt hơn là thêm một thuộc tính mới " Fonts provided by application" vào info.plisttệp của bạn .

Sau đó, bạn có thể sử dụng phông chữ tùy chỉnh của bạn như bình thường UIFont.


3

Có một cách mới để sử dụng phông chữ tùy chỉnh, bắt đầu với iOS 4.1. Nó cho phép bạn tải phông chữ một cách linh hoạt, từ các tệp có trong ứng dụng, dữ liệu đã tải xuống hoặc những gì có bạn. Nó cũng cho phép bạn tải phông chữ khi bạn cần chúng, trong khi phương thức cũ tải tất cả chúng khi khởi động ứng dụng, có thể mất nhiều thời gian nếu bạn có nhiều phông chữ.

Phương pháp mới được mô tả tại ios-Dynamic-font-load

Bạn sử dụng CTFontManagerRegisterGraphicsFonthàm, cung cấp cho nó một bộ đệm với dữ liệu phông chữ của bạn. Sau đó, nó có sẵn cho UIFontvà lượt xem web, giống như phương pháp cũ. Đây là mã mẫu từ liên kết đó:

NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);

Tôi đã sử dụng mã này nhưng gặp lỗi & lỗi Không thể tải phông chữ: Thao tác không thể hoàn tất. (com.apple.coretext lỗi 105 - Không thể đăng ký CGFont '<CGFont (0x14fe7df0): Shruti>')
Hiren

Theo tài liệu, lỗi 105 là kCTFontManagerErrorAlreadyRegistered"Tệp đã được đăng ký trong phạm vi được chỉ định." developer.apple.com/l
David M.

3

Swift, cách mã: (cũng hoạt động với swift 2.0)

Thêm phông chữ cần thiết vào dự án của bạn (giống như thêm hình ảnh, chỉ cần kéo vào Xcode), đảm bảo rằng chúng được nhắm mục tiêu cho dự án của bạn
thêm phương thức này và tải phông chữ tùy chỉnh (được khuyến nghị trong appDelegate didFinishLaunchingWithOptions)

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

Sử dụng ví dụ:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Sử dụng phông chữ:

UIFont(name: "My-Font", size: 16.5)

Chỉ cần tự hỏi, tại sao bạn sẽ không chỉ thêm phông chữ trong Info.plist của bạn có vẻ như nhiều công việc hơn cho cùng một điều.
Stephen Jesse

2

Bạn có thể thêm các tệp "FONT" cần thiết trong thư mục tài nguyên. Sau đó đi đến dự ánInfo.plist tệp và sử dụng các "Phông chữ do ứng dụng cung cấp" và giá trị là "TÊN TÊN".

Sau đó, bạn có thể gọi phương thức [UIFont fontwithName:@"FONT NAME" size:12];


1

Tôi đã làm mọi thứ có thể nhưng phông chữ mới không xuất hiện nên tôi tìm giải pháp:

Khi bạn kéo các tập tin fot (otf hoặc ttf) KHÔNG quên kiểm tra hộp kiểm bên dưới "Thêm vào mục tiêu".

Sau khi làm điều đó phông chữ của bạn sẽ xuất hiện và mọi thứ sẽ hoạt động tốt.


1

Mặc dù một số câu trả lời ở trên là chính xác, tôi đã viết một hướng dẫn trực quan chi tiết cho những người vẫn gặp vấn đề với phông chữ.

Các giải pháp ở trên cho bạn biết thêm phông chữ vào bảng và sử dụng

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

là những người chính xác. Xin vui lòng sử dụng bất kỳ cách hackish khác. Nếu bạn vẫn gặp vấn đề với việc tìm tên phông chữ và thêm chúng, đây là hướng dẫn -

Sử dụng phông chữ tùy chỉnh trong ứng dụng ios


Tôi chỉ thử điều này. Có vẻ như để làm việc nhưng phông chữ của tôi rất nhỏ, cho dù tôi đặt kích thước nào. Để biết giá trị của nó, tôi đang sử dụng tệp OTF có sẵn miễn phí: philsfonts.com/index.php/free_fonts
ari gold

Hãy thử nó với bất kỳ phông chữ tùy chỉnh nào khác và nếu vấn đề vẫn còn, hãy cho tôi biết. Nếu nó hoạt động theo cách đó, thì có một vấn đề với phông chữ của bạn.
Bharat Gulati

1

vâng, bạn có thể sử dụng phông chữ tùy chỉnh trong ứng dụng của bạn

từng bước sau đó:

Thêm tệp phông chữ tùy chỉnh của bạn vào dự án của bạn trong tệp hỗ trợ

Thêm khóa vào tệp Info.plist của bạn được gọi là UIAppFonts.

Biến khóa này thành một mảng

Đối với mỗi phông chữ bạn có, hãy nhập tên đầy đủ của tệp phông chữ của bạn (bao gồm cả phần mở rộng) làm các mục vào mảng UIAppFonts

Lưu thông tin trên phông chữ tùy chỉnh và xem tên phông chữ phía trên một cách cẩn thận đang đến và sao chép phông chữ này, dán, ở đây [UIFont fontWithName: @ "ở đây qua Tên phông chữ tùy chỉnh của bạn" size: 20]

tôi hy vọng bạn sẽ nhận được câu trả lời đúng


1

vâng, bạn có thể sử dụng phông chữ tùy chỉnh trong ứng dụng của bạn

từng bước sau đó:

  • Thêm tệp phông chữ tùy chỉnh của bạn vào dự án của bạn trong tệp hỗ trợ
  • Thêm một khóa vào Info.plisttệp của bạn được gọi là UIAppFonts.
  • Biến khóa này thành một mảng
  • Đối với mỗi phông chữ bạn có, hãy nhập tên đầy đủ của tệp phông chữ của bạn (bao gồm cả phần mở rộng) làm các mục vào mảng UIAppFonts
  • Lưu Info.plist ngay trong ứng dụng của bạn, bạn chỉ cần gọi [UIFont fontWithName:@"your Custom font Name" size:20]để có được phông chữ tùy chỉnh để sử dụng vớiUILabels

Sau khi áp dụng điều này nếu bạn không nhận được phông chữ chính xác thì bạn nhấp đúp chuột vào phông chữ tùy chỉnh và xem tên phông chữ phía trên một cách cẩn thận và sao chép phông chữ này, dán, ở đây [UIFont fontWithName:@" here past your Custom font Name" size:20] tôi hy vọng bạn sẽ nhận được câu trả lời chính xác

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.