2015-09-24 12 views

答えて

10

システムフォントのラベルにフォントウェイトSemiboldを設定すると、同じエラーが表示されます。この重量は新しいシステムフォント(サンフランシスコ)では利用可能ですが、古いHelvetica Neueでは使用できませんので、そのエラーは古いOSで適切な重みを得ることができないことを意味します。

私の場合、Helvetica Neue、Boldのフォントをウェイトに変更すると、エラーが修正されました。

+4

font-weightを両方のフォントファミリで使用可能な「Medium」に設定すると、エラーは解決されません。 – Henrik

2

問題はシステムフォントの重量を変更することではなく、問題はXcodeがこの矛盾する文を正しく処理しないことです。詳細はfull blog postを参照してください。 3つのシナリオがあります。

最初の明示的なタイポグラフィは重要ではありません。通常の体重でも構いません。その後、マルコの答えに固執し、明確な標準的な体重を使用します。


第2明示的なタイポグラフィが推奨されますが、古いシステムでは危険にさらされる可能性があります。これはデフォルトの動作で、Xcodeは単に警告を表示し、10.11より前のターゲットで通常のフォントを使用します。適応型レイアウトを使用する場合は、すべてが正常であるはずです。警告を取り除くために、あなたは、単にストーリーボードインスペクタに高い目標を設定することができます。

注意をストーリーボードには、以前のターゲットのためのフォールバック機能を使用している場合、彼らは問題を引き起こすであろう、無効になる可能性があります - 私の避難所これまで何にも出会っていない。


第三者の明示的なタイポグラフィは必須です。この場合、カスタムの検査可能なプロパティを持つカスタムテキストフィールドを使用できます。アイデンティティインスペクタを開き、カスタムクラスをTextFieldに設定すると、属性インスペクタに優先フォントウェイト属性が表示され、必要な値が設定され、結果が構築され、楽しめます。

import AppKit 

@IBDesignable public class TextField: NSTextField 
{ 
    @IBInspectable public var preferredFontWeight: Int = 0 

    override public func awakeFromNib() { 
     if #available(OSX 10.11, *) { 
      return 
     } 

     guard 
     let weight: Int = self.preferredFontWeight where weight > 0, 
     let font: NSFont = self.font, 
     let name: String = font.familyName, 
     let manager: NSFontManager = NSFontManager.sharedFontManager() else { 
      return 
     } 

     // Full details here – https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSFontManager_Class/#//apple_ref/occ/instm/NSFontManager/convertWeight:ofFont: 
     // 
     // 1 – ultralight 
     // 2 – thin 
     // 3 – light, extralight 
     // 4 – book 
     // 5 – regular, display 
     // 6 – medium 
     // 7 – demi, demibold 
     // 8 – semi, semibold 
     // 9 – bold 
     // 10 – extra, extrabold 
     // 11 – heavy 
     // 12 – black 
     // 13 – ultrablack 
     // 14 – extrablack 

     if let font: NSFont = manager.fontWithFamily(name, traits: manager.traitsOfFont(font), weight: weight, size: font.pointSize) { 
      self.font = font 
     } 
    } 
} 

P.S.大胆な太さは、多少異なるロジックを使用している可能性が高いため、おそらくOS X 10.0以来利用可能なboldSystemFontOfSize(_:)があり、ストーリーボードが依存する可能性がある他の多くの方法とは異なります。

関連する問題