2016-12-23 18 views
2

iPhone(6-6s-7)プラスの横と縦向きのナビゲーションバーの背景に2種類の異なる(赤と緑のような)画像を設定する方法またはiPadですか?iPhoneとiPad UIBarMetrics(ナビゲーションバーの異なる風景/ポートレート画像)

[[UINavigationBar appearance] setBackgroundImage:redImage 
            forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:greenImage 
            forBarMetrics:UIBarMetricsCompact]; 

iPadまたはiPhone * plusでは動作しません。両方の向きに常にredImageを使用してください。しかし、他のすべてのiPhone(と私は推測してもiPod)で動作します。

また、iPhoneとiPad/iPhone間のバーメトリック(およびその他のもの)の違いについては何かを読んでみるとよいでしょう。(ナビゲーションバーの背景画像)は特定の動作(iPhoneプラス、私は実現しているiPad)(別の区切りのインセットのテーブルビューなど)。

ありがとうございます。

+1

ここでは、https://developer.apple.com/reference/uikit/uitraitcollectionでサイズクラスについて読むことができます。そして、iPadは両方の次元で同じサイズのクラスを持っていることがわかります。 UIInterfaceOrientationを使用し、カスタム_isIPadメソッドを記述して、異なる向きの正しい画像を選択する必要があります。 –

+1

サイズクラスについてはAppleのドキュメントをご覧ください:https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.htmlこれはあなたに役立つことを願っています。 –

+0

ありがとう、あなたのコメントは役に立ちます。 – SiavA

答えて

1

ビューコントローラクラス(またはステータスバーを制御できる他のクラス)をUIApplicationDidChangeStatusBarOrientationNotificationにサブスクライブできます。ハンドラでは、あなたの背景画像を更新する必要があります。

<...> 
if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || 
      [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     image = redImage; 
    } 
    else 
    { 
     image = greenImage; 
    } 
<...> 

あなたのタスクはsize classesに基準としてインターフェイスの向きを使用しますが、UIBarMetrics拠点ので、あなたは、このためにUIBarMetricsを使用することはできません。したがって、外観を使用して必要な動作を実現することはできません。

UINavigationBarのカスタムサブクラスを作成し、内部にそのロジックを実装することをお勧めします。

関連する問題