2015-09-21 17 views
6

दोनों के लिए सिस्टम फ़ॉन्ट मैं अपने ऐप के लिए आईओएस 8 और आईओएस 9 सिस्टम दोनों का समर्थन करना चाहता हूं। और शायद आईओएस 7. जैसा कि हम जानते हैं, आईओएस 7 और 8 के लिए सिस्टम फ़ॉन्ट हेल्वैटिका नियू है। लेकिन आईओएस 9 सिस्टम फ़ॉन्ट में सैन फ्रांसिस्को है। और यदि आप हेलवेस्टिका फ़ॉन्ट को [UIFont fontWithName:@"HelveticaNeue" size:15]; के माध्यम से स्पष्ट रूप से सेट नहीं करते हैं, लेकिन [UIFont systemFontOfSize:15]; का उपयोग करें, तो आपको आईओएस 7 और 8 के लिए हेल्वैटिका और आईओएस 9 के लिए सैन फ्रांसिस्को मिल जाएगा। और यह बहुत अच्छा है! इंटरफ़ेस बिल्डर के लेबल और बटन के लिए आप पतले, अति पतले, मध्यम आदि सिस्टम फोंट सेट कर सकते हैं। यह भी बहुत अच्छा है। लेकिन मैं प्रोग्राम में, इन पतले, अल्ट्रा, मध्यम सिस्टम फोंट कोड में कैसे सेट कर सकता हूं? क्या मुझे आईओएस 9 और पिछले आईओएस के लिए एक कांटा के साथ एक श्रेणी बनाने की ज़रूरत है?आईओएस 8 और आईओएस 9

उत्तर

5

+ systemFontOfSize:weight: का उपयोग करें। यह आईओएस 8 और उसके बाद के लिए उपलब्ध है।

आईओएस 7 के लिए, इंटरफ़ेस बिल्डर सेटिंग्स काम करेगी, और कोड के लिए आपको उचित वजन के साथ UIFontDescriptor बनाने की आवश्यकता होगी।

+3

'+ systemFontOfSize: वजन:' आईओएस 8.2 और बाद में उपलब्ध है। –

+0

@ValentinShamardin इसके बारे में चिंता न करें, विधि आईओएस 8 के बाद से थी। इसे 8.2 में सार्वजनिक एपीआई के रूप में उजागर किया गया था, लेकिन आप इसका उपयोग कर सकते हैं। –

2

धन्यवाद @ लियो नतन। लेकिन मैं कॉपी-पेस्ट प्रेमियों के लिए एक कोड स्निपेट दिखाना चाहता हूं।

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

ओएस संस्करण की बजाय विशिष्ट कार्यक्षमता के लिए परीक्षण करना बेहतर है। उपलब्धता के परीक्षण के लिए '[यूआईएफओटी प्रतिक्रियाएं चयनकर्ता: @ चयनकर्ता (systemFontOfSize: weight :)]' का उपयोग करें। –

+0

@LeoNatan आप सही हैं! बेशक –

10

मैं इस एक्सटेंशन बना लिया है:

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)! 
     } 
    } 
} 

कौन सा संभव बनाता है इस तरह फ़ॉन्ट लागू करने के लिए:

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

यह स्वचालित रूप से दोनों iOS 8 और के लिए सही फ़ॉन्ट स्थापित करेगा आईओएस 9.

0

धन्यवाद @ स्विफ्ट के लिए महान उत्तर पोस्ट करने के लिए धन्यवाद। उद्देश्य सी है अगर कोई चाहता है तो इसी प्रकार का उत्तर है। 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