2011-07-01 39 views
33

如何獲取UIFont實例的字體大小?如何獲取UIFont實例的字體大小或粗體版本

或者,如果有人可以對UIFont實施此方法?

- (UIFont *)boldFont; 
+22

你斯威夫特3正在尋找['pointSize'](http://developer.apple。 com/library/ios/documentation/uikit/reference/UIFont_Class/Reference/Reference.html#// apple_ref/occ/instp/UIFont/pointSize)。 –

+0

收件人:@Deepak,pointSize是否與fontSize相同? – iwill

+4

@iill:是的,'pointSize'將等於您提供給UIFont構造函數的'size:'參數的值。如果您閱讀UIFont的文檔,您會看到fontSize/fontOfSize方法以點爲單位獲取或返回值。 – titaniumdecoy

回答

12

UIFontDescriptor是非常強大的類,可用於獲取大膽一些點你想要的字體版本。它應該是完全安全的和未來的證明,因爲它只需要使用公共API並且不依賴於任何字符串修改。

這裏是斯威夫特3代碼:

extension UIFont { 

    func bold() -> UIFont? { 
     let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [fontDescriptor.symbolicTraits, .traitBold] 
     let bondFontDescriptor = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits) 
     return bondFontDescriptor.flatMap { UIFont(descriptor: $0, size: pointSize) } 
    } 

} 

這裏是在Objective-C代碼:

@implementation UIFont (RABoldFont) 

- (UIFont *)ra_boldFont 
{ 
    UIFontDescriptor *fontDescriptor = [self fontDescriptor]; 
    UIFontDescriptorSymbolicTraits traits = fontDescriptor.symbolicTraits; 
    traits = traits | UIFontDescriptorTraitBold; 
    UIFontDescriptor *boldFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:traits]; 
    return [UIFont fontWithDescriptor:boldFontDescriptor size:self.pointSize]; 
} 

@end 
+0

這是iOS 7以來的最佳答案。 – iwill

2

使用NSString+UIKit方法來測量具有特定字體的字符串的大小。

iPhone將相同名稱的普通和粗體字體視爲完全獨立的字體,因此沒有簡單的方法在它們之間進行轉換。例如,ArialMT和Arial-BoldMT被OS視爲完全不同的字體。

編輯:我可能誤解了你的問題。也許你正在尋找UIFont的pointSize屬性?

24

要從UIFont實例訪問的字號使用

@property(nonatomic, readonly) CGFloat pointSize 

還有更多的屬性來告訴字體大小(帽,小等)

capHeight,xHeight,pointSize 

下面使用訪問粗體字體

UIFont* myboldFont = [UIFont boldSystemFontOfSize:11]; 
+4

'boldFont:'方法完全沒用;它只是'boldSystemFontOfSize:'的包裝器。似乎很明顯,@iwill正在問如何將現有的UIFont轉換爲其大膽的UIFont。 – titaniumdecoy

38

這是一箇舊的答案,它不再是最好的解決方案請參閱接受的答案。

-(UIFont *)boldFont{ 

//First get the name of the font (unnecessary, but used for clarity) 
NSString *fontName = self.fontName; 

//Some fonts having -Regular on their names. so we have to remove that before append -Bold/-BoldMT 
fontName = [[fontName componentsSeparatedByString:@"-"] firstObject]; 

//Then append "-Bold" to it. 
NSString *boldFontName = [fontName stringByAppendingString:@"-Bold"]; 

//Then see if it returns a valid font 
UIFont *boldFont = [UIFont fontWithName:boldFontName size:self.pointSize]; 

//If it's valid, return it 
if(boldFont) return boldFont; 

//Seems like in some cases, you have to append "-BoldMT" 
boldFontName = [fontName stringByAppendingString:@"-BoldMT"]; 
boldFont = [UIFont fontWithName:boldFontName size:self.pointSize]; 

//Here you can check if it was successful, if it wasn't, then you can throw an exception or something. 
return boldFont; 

} 
+1

最後:if(boldFont)return boldFont;迴歸自我; – iwill

+2

並且:NSString * fontName = self.fontName;應該是NSString * fontName = self.familyName; //那麼這將是完美的,謝謝! – iwill

+2

附加'-BoldMT'不適用於ArialMT等字體。其大膽的等價物是「Arial-BoldMT」,而不是「ArialMT-BoldMT」。 – titaniumdecoy

0

你可以用核心文本檢查粗體。使用kCTFontBoldTrait

8

這是最簡單的方式找到字體大小

UIFont *anyFont; 
//initialization and other stuff here 

現在你想找到它的大小

CGFloat fontSize= [anyFont pointSize]; 
0

版本的rafał-augustyniakanswer

extension UIFont { 


    func boldFont() -> UIFont? { 
     let fontDescriptor = self.fontDescriptor 
     let fontDescriptorSymbolicTraits: UIFontDescriptorSymbolicTraits = [ fontDescriptor.symbolicTraits, .traitBold ] 

     guard let boldFontDesc = fontDescriptor.withSymbolicTraits(fontDescriptorSymbolicTraits) else { 
      return nil 
     } 

     return UIFont(descriptor: boldFontDesc, size: pointSize) 
    } 

} 
相關問題