UIFontインスタンスのフォントサイズを取得する方法は?
または、誰かがこのメソッドをUIFontに実装できる場合は?
- (UIFont *)boldFont;
UIFontDescriptor
は非常に強力なクラスであり、目的のフォントのboldバージョンを取得するために使用できます。パブリックAPIの使用のみが必要であり、文字列の変更に依存しないため、完全に安全で将来の証拠になるはずです。
Swift 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
これは古い回答であり、もはや最善の解決策ではありません。代わりに受け入れられた回答をご覧ください。
-(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;
}
UIFontインスタンスからフォントサイズにアクセスするには
@property(nonatomic, readonly) CGFloat pointSize
フォントサイズを伝えるプロパティがさらにあります(キャップ、スモールなど)。
capHeight,xHeight,pointSize
以下を使用して太字フォントにアクセスします
UIFont* myboldFont = [UIFont boldSystemFontOfSize:11];
これがフォントサイズを見つける最も簡単な方法です
UIFont *anyFont;
//initialization and other stuff here
ある時点でそのサイズを見つけたい
CGFloat fontSize= [anyFont pointSize];
NSString + UIKit メソッドを使用して、特定のフォントで文字列のサイズを測定します。
IPhoneは、同じ名前の通常フォントと太字フォントを完全に別個のフォントとして扱います。そのため、それらの間で変換する簡単な方法はありません。たとえば、ArialMTとArial-BoldMTは、OSによって完全に異なるフォントと見なされます。
編集:あなたの質問を誤解したかもしれません。おそらく、UIFontの pointSize プロパティを探していますか?
rafał-augustyniakanswer のSwift 3バージョン
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)
}
}
Core Textで太字を確認できます。 kCTFontBoldTrait
を使用します。