2013-09-30 73 views
1

我試圖加載UITextViewNSAttributedString。我正在從Rich Text File「.rtf」加載NSAttributedStringNSAttributedString只適用於Helvetica Neue字體

的每一個在我[NSBundle mainBundle]My Text-HelveticaNeue.rtfMy Text-TimesNewRomanPSMT.rtfMy Text-MarkerFelt-Thin.rtf這些文件的文件名稱具有正確的字體集。他們也有一些文字粗體。

這裏是我的代碼:

NSString *resourseName = [NSString stringWithFormat:@"My Text-%@", self.currentFontName]; 
NSURL *rtfUrl = [[NSBundle mainBundle] URLForResource:resourseName withExtension:@".rtf"]; 
NSError *error; 

NSAttributedString *myAttributedTextString = [[NSAttributedString alloc] initWithFileURL:rtfUrl options:nil documentAttributes:nil error:&error]; 

myTextView.attributedText = myAttributedTextString; 

NSLog(@"%@", myAttributedTextString); 

的Helvetica Neue字體文件會保留所有格式,包括大膽的文字。但其他文件只保留其字體;他們不保留大膽的文字。我可能做錯了什麼?

編輯:

我跟着@Rob的建議,這裏是我得到的輸出。

Name:HelveticaNeue 
Font:<UICTFont: 0xc1aab30> font-family: "Helvetica Neue"; font-weight: normal; font-style: normal; font-size: 13.00pt 
Bold:<UICTFont: 0xc1af770> font-family: "Helvetica Neue"; font-weight: bold; font-style: normal; font-size: 13.00pt 

Name:MarkerFelt-Thin 
Font:<UICTFont: 0xfb16170> font-family: "MarkerFelt-Thin"; font-weight: normal; font-style: normal; font-size: 13.00pt 
Bold:<UICTFont: 0xfb18c60> font-family: "MarkerFelt-Thin"; font-weight: normal; font-style: normal; font-size: 13.00pt 

Name:TimesNewRomanPSMT 
Font:<UICTFont: 0xc1cb730> font-family: "Times New Roman"; font-weight: normal; font-style: normal; font-size: 13.00pt 
Bold:<UICTFont: 0xc1c9b30> font-family: "Times New Roman"; font-weight: normal; font-style: normal; font-size: 13.00pt 
+0

你加'我的文字MarkerFelt-Thin.rtf'和你的項目和你的plist中的「Text-TimesNewRomanPSMT.rtf」? –

+0

問題不在於顯示的文字。它保留了格式。但是,是的,我將這些文件添加到了我的項目中。我如何檢查他們是否屬於我的plist? @JordanMontel –

+0

在你的info.plist中添加鍵UIAppFonts(應用程序提供的字體)和每個自定義字體的名稱(例如:Text-TimesNewRomanPSMT.rtf) –

回答

1

iOS沒有提供MarkerFelt-Thin的粗體或斜體版本,所以無法顯示該內容。

的iOS確實船TimesNewRomanPS-BoldMT,但它似乎並不認爲這是TimesNewRomanPSMT的粗體版本。 (我沒有測試過,但是從你的評論中,我認爲TimesNewRomanPS-ItalicMT也是如此;它存在但不被認爲是斜體)。我可能會考慮這個bug並打開雷達。

這裏的一個關鍵點是,你不「大膽」或「斜體」的字體。粗體字體和斜體字體都是完整的字體(單獨由字體設計師設計並打包成自己的字體定義)。他們只是與基地(「羅馬」)版本有象徵關係。如果沒有安裝字體的粗體版本,則請求粗體只返回相同的字體。

您可以探索哪些字體可用,什麼字體的iOS認爲另一種字體的粗體版本,使用這樣的程序:

void LogFontNamed(NSString *name) { 
    UIFont *font = [UIFont fontWithName:name size:13]; 
    UIFontDescriptor *boldFontDescriptor = [[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold]; 
    UIFont *boldFont = [UIFont fontWithDescriptor:boldFontDescriptor size:13]; 

    NSLog(@"================="); 
    NSLog(@"Name:%@", name); 
    NSLog(@"Font:%@", font); 
    NSLog(@"Bold:%@", boldFont); 
    NSLog(@"================="); 
} 

void printFonts() { 
// uncomment if you want to explore the font lists 
// NSLog(@"%@",[UIFont familyNames]); 
// NSLog(@"%@", [UIFont fontNamesForFamilyName:@"Times New Roman"]); 

    LogFontNamed(@"HelveticaNeue"); 
    LogFontNamed(@"MarkerFelt-Thin"); 
    LogFontNamed(@"TimesNewRomanPSMT"); 
    LogFontNamed(@"TimesNewRomanPS-BoldMT"); 
} 
+0

感謝您的評論。很有幫助。我已經用輸出更新了我的問題。 @Rob Napier –

+0

我只是建議你自己看看輸出,看看iOS告訴你什麼。看看MarkerFelt-Thin的大膽版本是MarkerFelt-Thin?那就是我的意思;沒有那種字體的粗體。 –

相關問題