2017-01-03 29 views
0

UILabelフォントを大きなデバイスで大きく、小さなデバイスで小さく設定する方法はありますか?デバイスサイズのUILabelフォントサイズを調整する

私はプログラムでデバイスのサイズを毎回確認する必要がありますか?

私のアプローチは、今、このです: - 私の場合は60

class func hightlightPtSize(height: CGFloat) -> CGFloat { 
    return height/25 
} 

class func notSoHighlightPtSize(height: CGFloat) -> CGFloat { 
    return height/30 
} 

class func stdPtSize(height: CGFloat) -> CGFloat { 
    return height/35 
} 

class func sizeForType(height: CGFloat, type: Int) -> CGFloat { 
    switch type { 
    case STD: 
     return stdPtSize(height: height) 
    case HIGHLIGHT: 
     return hightlightPtSize(height: height) 
    case NOT_SO_HIGH: 
     return notSoHighlightPtSize(height: height) 
    default: 
     return 0 
    } 
} 
+0

私はあなたがちょうどあなたがどのような決議に定義することによって決定することができ、代わりにこの – Tj3n

+0

の '' adjustsFontSizeToFitWidthを使用することができると思うが、あなたがUIを設計している、あなたのストーリーボードがある場合は言いますiPhone 6の場合、幅を375に固定して変更を計算すると、デバイスをiPhone 5の幅320に設定して実行すると、 '320/375'で' .85との違いが得られ、フォントサイズが14のiPhone 6の場合は、iPhone 5の場合は11.9、大きなデバイスの場合は実際のフォントサイズ(つまり14 * .85)に掛け合わせることで大きくなりますので、formulaは 'fontSize *(actualScreenWidth/designTimeScreenWidth)'になります。 – iphonic

+0

Iあなたが直面していることを理解することはできませんが、手動で行うよりも多くのアプローチが考えられると思います。[Intrinsic Content Size]のアイデアを確認する(https://developer.apple.com/library/コンテンツ/ドキュメンテーション/ユーザーエクスペリエンス/概念/ AutolayoutPG/ViewswithIntrinsicContentSize.html)があなたの場合に役立つかもしれません。 –

答えて

4

私はあなたの問題の解決方法を持っています。 Objective Cのコードの下に。

float newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/568.0); 
     if ([UIScreen mainScreen].bounds.size.height < 500) { 
      newFontSize = [UIScreen mainScreen].bounds.size.height * (fontSize/480.0); 
     } 
     self.label.font = [UIFont fontWithName:self.label.font.fontName size:newFontSize]; 

私はこれがあなたを助けてくれることを願っています。

+0

480.0と568.0はどういう意味ですか? – Andre99

+0

デザイン時にUIScreenの高さとxibの現在の高さを比較することによって、デバイスのスケーリングの比率に従ってフォントサイズを増やします。私は大きなデバイスのために568を設定し、5sと480の小さいデバイスを設定しました:) –

+0

は魅力的に働きました、ありがとう – Andre99

1

私が使用されるすべての可能性がより大きく、すべてのラベルのための私のデフォルトのフォントを作ることによって前に試してみました。次にのsizeを設定している間にadjustsFontSizeToFitWidthプロパティをtrueに設定して、システムにフォントを割り当てます。

ラベルを画面サイズに比例させるには、ストーリーボードの自動サイズ調整機能を使用します。 UILabelを選択して、既存の制約がない場合、あなたはこのような何か見ることができます:Xcodeの右側のパネルで

enter image description here

を、オンまたはオフに切り替えるには、行をクリックし、上の4つのライン両側からビューの距離が維持されているかどうかを確認しますsuperview正方形内の2つがあなたのケースではsuperviewでサイズ変更されているかどうかを確認します。他の4つについては、私がしていないものを試してみてください。設定する乗数を変更 -

  • ラベルスーパー(幅)に等しい(幅):制約はそれの兄弟やスーパー/サブビューで必要とされている場合

    は、私はあなたのような制約のセットを試す提案することができますどのくらいのスペースを取るか

  • スーパービュー(高さ)と同じ - 幅と同じ
  • スーパービュー(先行)と等しいラベル(先頭) - 先行エッジからの距離を設定するために定数を変更します。必要に応じて後端に変更
  • SuperViに等しいラベル(上) ew(上)は先頭と同じで、必要に応じて下に変更できます。

それはやや冗長であってもよいが、主にサイズを取得するために、最初の二つのノートを取る可能性がある、ない定数制約の乗数を設定します。次の2つは主に、ラベルを適切に表示するための要件を満たすことです。センターを自由に配置したり、上/下/前/後を組み合わせて並べて、希望の位置に配置することができます。

+0

、少なくとも制約を使用する必要がある場合はどうすればよいですか?つまり、UILabelは合計幅の半分を使用する必要があります。 – Andre99

+0

あなたの例では、その制約は必要ありません。 'UILabel'の現在のサイズを' UIView'の半分に設定し、水平スケーリング(左右の2つの矢印を持つ行)を切り替えることによって、 'UILabel'は常に' superview'の半分にサイズ変更されます。他の制約の必要がある場合は、制約を使用するための答えを改善する間にしばらく待たなければならないかもしれません。 –

+0

これは簡単な例でしたが、私のプロジェクトでは本当に制約が必要です。 – Andre99

0

のKishan godhaniのソリューションのマイスウィフトバージョン:

let screen = UIScreen.main 
var newFontSize = screen.bounds.size.height * (defaultFont/568.0); 
if (screen.bounds.size.height < 500) { 
    newFontSize = screen.bounds.size.height * (defaultFont/480.0); 
} 
label.font = label.font.withSize(newFontSize) 
関連する問題