2015-09-21 8 views
6

私のアプリ用にiOS 8とiOS 9の両方のシステムをサポートしたいと考えています。私たちが知っているように、iOS 7と8のシステムフォントはHelvetica Neueです。しかし、iOS 9のシステムフォントはサンフランシスコです。また、Helveticaフォントを[UIFont fontWithName:@"HelveticaNeue" size:15];で明示的に設定せず、[UIFont systemFontOfSize:15];を使用すると、iOS 7と8のHelveticaとiOS 9のサンフランシスコが自動的に取得されます。それは素晴らしいです! インタフェースビルダーのラベルやボタンには、薄い、薄い、中程度のシステムフォントを設定できます。それも素晴らしいです。しかし、これらの薄い、超、中規模のシステムフォントをプログラムでコードで設定するにはどうすればよいですか? iOS 9以前のiOSでは、フォークでカテゴリを作成する必要がありますか?iOS 8とiOS 9両方のシステムフォント

答えて

5

+ systemFontOfSize:weight:を使用してください。 iOS 8以上でご利用いただけます。

iOS 7ではインターフェイスビルダの設定が機能し、コードでは適切なウェイトのUIFontDescriptorを作成する必要があります。

+3

' + systemFontOfSizeのカテゴリを実装します。 –

+0

@ValentinShamardinそれは心配しないでください。メソッドはiOS 8以来存在していました。それは公開されたAPIとして8.2に公開されたばかりでしたが、それを使うことができます。 –

2

ありがとう@Leo Natan。しかし、私はコピーペースト愛好家のためのコードスニペットを示したいと思います。

UIFont* systemFont = [UIFont respondsToSelector:@selector(systemFontOfSize:weight:)] ? [UIFont systemFontOfSize:25 weight:UIFontWeightThin] : [UIFont fontWithName:@"HelveticaNeue-Thin" size:25]; 
+1

OSのバージョンではなく、特定の機能をテストする方が良いです。可用性をテストするには '[UIFont respondsToSelector:@selector(systemFontOfSize:weight :)]'を使います。 –

+0

@LeoNatanあなたはそうです!もちろん –

10

私はこの拡張機能を作成しました:これは、自動的に両方のiOS 8の正しいフォントを設定します

myLabel.font = UIFont.systemFontOfSize(14, weight: .Medium) 

とこのようにフォントを適用することが可能になり、どの

import Foundation 
import UIKit 

enum SystemFontWeight : String { 
    case UltraLight = "HelveticaNeue-UltraLight" 
    case Thin = "HelveticaNeue-Thin" 
    case Light = "HelveticaNeue-Light" 
    case Regular = "HelveticaNeue" 
    case Medium = "HelveticaNeue-Medium" 
    case Semibold = "Helvetica-Bold" 
    case Bold = "HelveticaNeue-Bold" 
    case Heavy = "HelveticaNeue-CondensedBold" 
    case Black = "HelveticaNeue-CondensedBlack" 

    var weightValue:CGFloat? { 
     if #available(iOS 8.2, *) { 
      switch self { 
      case .UltraLight: 
       return UIFontWeightUltraLight 
      case .Thin: 
       return UIFontWeightThin 
      case .Light: 
       return UIFontWeightLight 
      case .Regular: 
       return UIFontWeightRegular 
      case .Medium: 
       return UIFontWeightMedium 
      case .Semibold: 
       return UIFontWeightSemibold 
      case .Bold: 
       return UIFontWeightBold 
      case .Heavy: 
       return UIFontWeightHeavy 
      case .Black: 
       return UIFontWeightBlack 
      } 
     } else { 
      return nil 
     } 
    } 
} 

extension UIFont { 
    static func systemFontOfSize(fontSize:CGFloat, weight:SystemFontWeight) -> UIFont { 
     if #available(iOS 8.2, *) { 
      return UIFont.systemFontOfSize(fontSize, weight: weight.weightValue!) 

     } else { 
      // Fallback on earlier versions 
      return UIFont(name: weight.rawValue, size: fontSize)! 
     } 
    } 
} 

iOS 9.

0

すばらしい答えを投稿するための@Antoineありがとうございます。以下はObjective Cです。もし誰かが欲しいのであれば、同様の答えです。重量: `のiOS 8.2で利用可能と後でUIFont

UIFont + Cat.m

#import "UIFont+Cat.h" 

@implementation UIFont (Cat) 

+ (UIFont *)systemFontWithSize:(CGFloat)fontSize weight:(CGFloat)weight { 
    if ([UIFont respondsToSelector:@selector(systemFontOfSize:weight:)]) { 
     return [UIFont systemFontOfSize:fontSize weight:weight]; 
    } 

    NSString *fontName = @"HelveticaNeue"; 
    if (weight == UIFontWeightUltraLight) { 
     fontName = @"HelveticaNeue-UltraLight"; 
    } 
    else if (weight == UIFontWeightThin) { 
     fontName = @"HelveticaNeue-Thin"; 
    } 
    else if (weight == UIFontWeightLight) { 
     fontName = @"HelveticaNeue-Light"; 
    } 
    else if (weight == UIFontWeightRegular) { 
     fontName = @"HelveticaNeue"; 
    } 
    else if (weight == UIFontWeightMedium) { 
     fontName = @"HelveticaNeue-Medium"; 
    } 
    else if (weight == UIFontWeightSemibold) { 
     fontName = @"Helvetica-Bold"; 
    } 
    else if (weight == UIFontWeightBold) { 
     fontName = @"HelveticaNeue-Bold"; 
    } 
    else if (weight == UIFontWeightHeavy) { 
     fontName = @"HelveticaNeue-CondensedBold"; 
    } 
    else if (weight == UIFontWeightBlack) { 
     fontName = @"HelveticaNeue-CondensedBlack"; 
    } 

    return [UIFont fontWithName:fontName size:fontSize]; 
} 

@end 
関連する問題