2015-09-21 22 views
6

Tôi muốn hỗ trợ cả hệ thống iOS 8 và iOS 9 cho ứng dụng của mình. Và có lẽ iOS 7. Như chúng ta đã biết, font hệ thống cho iOS 7 và 8 là Helvetica Neue. Nhưng phông chữ hệ thống iOS 9 là San-Francisco. Và nếu bạn không đặt phông chữ Helvetica rõ ràng qua [UIFont fontWithName:@"HelveticaNeue" size:15];, nhưng sử dụng [UIFont systemFontOfSize:15];, bạn sẽ tự động nhận được Helvetica cho iOS 7 và 8 và San-Francisco cho iOS 9. Và nó tuyệt vời! Đối với các nhãn và nút của trình tạo giao diện, bạn có thể đặt phông chữ mỏng, siêu mỏng, trung bình vv. Nó cũng tuyệt vời. Nhưng làm thế nào tôi có thể thiết lập các phông chữ hệ thống mỏng, siêu, trung bình trong mã, lập trình? Tôi có cần tạo danh mục có ngã ba cho iOS 9 và iOS trước không?Phông chữ hệ thống cho cả iOS 8 và iOS 9

Trả lời

5

Sử dụng + systemFontOfSize:weight:. Ứng dụng này có sẵn cho iOS 8 trở lên.

Đối với iOS 7, cài đặt trình tạo giao diện sẽ hoạt động và đối với mã, bạn cần phải tạo UIFontDescriptor với trọng lượng thích hợp.

+3

'+ systemFontOfSize: trọng lượng:' Có sẵn trong iOS 8.2 và sau này. –

+0

@ValentinShamardin Đừng lo lắng về nó, phương pháp đã có từ iOS 8. Nó đã được tiếp xúc như API công khai trong 8.2, nhưng bạn có thể sử dụng nó. –

2

Cảm ơn @Leo Natan. Nhưng tôi muốn hiển thị đoạn mã cho những người yêu thích sao chép-dán.

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

Nó là tốt hơn để kiểm tra cho chức năng cụ thể, chứ không phải là phiên bản hệ điều hành. Sử dụng '[UIFont respondsToSelector: @selector (systemFontOfSize: weight :)]' để kiểm tra tính khả dụng. –

+0

@LeoNatan Bạn nói đúng! Tất nhiên –

10

tôi đã tạo ra phần mở rộng này:

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

Mà làm cho nó có thể áp dụng phông chữ như thế này:

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

này sẽ tự động thiết lập các phông chữ chính xác cho cả iOS 8 và iOS 9.

0

Cảm ơn @Antoine đã đăng câu trả lời tuyệt vời cho nhanh chóng. Sau đây là mục tiêu C Tương tự như loại câu trả lời nếu ai muốn. Thực hiện mục cho 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 
Các vấn đề liên quan