Closed4

【Swift】UINavigationBar(Views and Controls) 0->1

yoshitakayoshitaka

UINavigationBar(UIKit -> Views and Controls ->)

画面上部のバーに表示されるナビゲーションコントロール。通常はナビゲーションコントローラーと連動します。

class UINavigationBar : UIView

UINavigationBarオブジェクトは、通常はウィンドウの上部に表示されるバーであり、画面の階層内を移動するためのボタンが含まれています。主要なコンポーネントは、左(戻る)ボタン、中央のタイトル、およびオプションの右ボタンです。ナビゲーションバーは、スタンドアロンオブジェクトとして、またはナビゲーションコントローラーオブジェクトと組み合わせて使用​​できます。

ナビゲーションバーは、ナビゲーションコントローラー内で最も一般的に使用されます。 UINavigationControllerオブジェクトは、関連付けられたナビゲーションバーを作成、表示、および管理し、追加したView Controllerの属性を使用して、ナビゲーションバーに表示されるコンテンツを制御します。

ナビゲーションコントローラーを使用するときにナビゲーションバーを制御するには、次の手順が必要です。

  • InterfaceBuilderまたはコードでナビゲーションコントローラーを作成します。
  • UINavigationControllerオブジェクトのnavigationBarプロパティを使用して、ナビゲーションバーの外観を構成します。
  • ナビゲーションコントローラーのスタックにプッシュする各UIViewControllerのtitleプロパティとnavigationItemプロパティを設定して、ナビゲーションバーのコンテンツを制御します。

ナビゲーションコントローラーを使用せずに、スタンドアロン(孤立)のナビゲーションバーを使用することもできます。インターフェイスにナビゲーションバーを追加するには、次の手順が必要です。

  • インターフェース内のナビゲーションバーの位置を管理する自動レイアウトルールを設定します。
  • ルートナビゲーションアイテムを作成して、最初のタイトルを指定します。
  • ナビゲーションバーとのユーザーインタラクションを処理するようにデリゲートオブジェクトを構成します。
  • ナビゲーションバーの外観をカスタマイズします。

ユーザーが階層画面をナビゲートするときに、関連するナビゲーション項目をプッシュおよびポップするようにアプリを構成します。

yoshitakayoshitaka

ナビゲーションコントローラーでのナビゲーションバーの使用

ナビゲーションコントローラーを使用してコンテンツのさまざまな画面間のナビゲーションを管理する場合、ナビゲーションコントローラーはナビゲーションバーを自動的に作成し、必要に応じてナビゲーションアイテムをプッシュおよびポップします。

ナビゲーションコントローラーは、UIViewControllerのnavigationItemプロパティを使用して、ビューコントローラーのスタックをナビゲートするときにモデルオブジェクトをナビゲーションバーに提供します。デフォルトのナビゲーションアイテムはビューコントローラーのタイトルを使用しますが、UIViewControllerサブクラスのnavigationItemをオーバーライドして、ナビゲーションバーのコンテンツを完全に制御できます。

ナビゲーションコントローラは、ナビゲーションバーオブジェクトのデリゲートとして自分自身を自動的に割り当てます。したがって、ナビゲーションコントローラを使用するときは、対応するナビゲーションバーにカスタムデリゲートオブジェクトを割り当てないでください。

ナビゲーションコントローラーに関連付けられているナビゲーションバーにアクセスするには、UINavigationControllerのnavigationBarプロパティを使用します。ナビゲーションバーの外観をカスタマイズする方法の詳細については、ナビゲーションバーの外観のカスタマイズを参照してください。

ナビゲーションコントローラーの詳細については、UINavigationControllerを参照してください。

yoshitakayoshitaka

スタンドアロンナビゲーションバーへのコンテンツの追加

ほとんどのシナリオでは、ナビゲーションコントローラーの一部としてナビゲーションバーを使用します。ただし、ナビゲーションバーのUIを使用して、コンテンツナビゲーションへの独自のアプローチを実装したい場合があります。このような状況では、スタンドアロンのナビゲーションバーを使用できます。

ナビゲーションバーをスタンドアロンオブジェクトとして使用する場合は、そのコンテンツを提供する責任があります。他のタイプのビューとは異なり、ナビゲーションバーにサブビューを直接追加することはありません。代わりに、ナビゲーションアイテム(UINavigationItemクラスのインスタンス)を使用して、表示するボタンまたはカスタムビューを指定します。ナビゲーションアイテムには、ナビゲーションバーの左、右、および中央のビューを指定するためのプロパティと、カスタムプロンプト文字列を指定するためのプロパティがあります。図1は、ナビゲーションアイテムのプロパティがナビゲーションバーにどのように表示されるかを示しています。

ナビゲーションバーは、UINavigationItemオブジェクトのスタックを管理します。スタックは主にナビゲーションコントローラーをサポートするためにありますが、それを使用して独自のカスタムナビゲーションインターフェイスを実装できます。スタックの最上位のアイテムは、現在ナビゲーションバーにコンテンツが表示されているナビゲーションアイテムを表します。 pushItem(_:animated :)メソッドを使用して新しいナビゲーションアイテムをスタックにプッシュし、popItem(animated :)メソッドを使用してスタックからアイテムをポップします。これらの変更は両方とも、ユーザーの利益のためにアニメーション化できます。

アイテムのプッシュとポップに加えて、itemsプロパティまたはsetItems(_:animated :)メソッドを使用して、スタックの内容を直接設定することもできます。起動時にこのメソッドを使用して、インターフェイスを以前の状態に復元したり、一度に複数のナビゲーションアイテムをプッシュまたはポップしたりできます。図2は、ナビゲーションアイテムのスタックの管理を担当するUINavigationBarAPIの一部を示しています。

ナビゲーションバーをスタンドアロンオブジェクトとして使用している場合は、カスタムデリゲートオブジェクトをデリゲートプロパティに割り当て、そのオブジェクトを使用してナビゲーションバーからのメッセージをインターセプトします。 デリゲートオブジェクトは、UINavigationBarDelegateプロトコルに準拠している必要があります。 委任通知を使用すると、ナビゲーションアイテムがスタックからプッシュまたはポップされたときに追跡できます。 これらの通知を使用して、アプリの残りのユーザーインターフェースを更新します。

ナビゲーションアイテムの作成の詳細については、UINavigationItemを参照してください。 デリゲートオブジェクトの実装の詳細については、UINavigationBarDelegateを参照してください。

yoshitakayoshitaka

ナビゲーションバーの外観のカスタマイズ

ナビゲーションバーには、2つの標準的な外観スタイルがあります。白と暗いテキスト、または黒と明るいテキストです。 barStyleプロパティを使用してスタイルを選択します。他のナビゲーションバーの外観プロパティに加えた変更は、バースタイルから推測されたものを上書きします。

ナビゲーションバーはデフォルトで半透明です。つまり、背景色は半透明です。 isTranslucentプロパティをfalseに設定すると、ナビゲーションバーを不透明にすることができます。

barTintColorプロパティを使用して、ナビゲーションバーの背景にカスタムの色合いを指定できます。このプロパティを設定すると、バースタイルから推測されるデフォルトの色が上書きされます。すべてのUIViewサブクラスと同様に、tintColorプロパティを使用して、ボタンの画像やタイトルなど、ナビゲーションバー内のインタラクティブ要素の色を制御できます。

titleTextAttributesプロパティは、バーのタイトルテキストを表示するための属性を指定します。 font、foregroundColor、およびshadowキーをそれぞれ使用して、テキスト属性ディクショナリのタイトルのフォント、テキストの色、テキストの影の色、およびテキストの影のオフセットを指定できます。文字列フォーマット属性の詳細については、「文字属性」を参照してください。

setTitleVerticalPositionAdjustment(_:for :)メソッドを使用して、タイトルの垂直位置を調整します。このメソッドを使用すると、UIBarMetrics列挙型で表されるバーの高さに応じて調整を指定できます。図3は、カスタムの色合いの色、タイトルのテキスト属性、およびバーの色合いの色を使用したナビゲーションバーを示しています。

ナビゲーションバーの外観を完全にカスタマイズできるように、カスタムの背景画像と影画像を追加で提供できます。カスタムの背景画像を提供するには、setBackgroundImage(_:for:barMetrics :)メソッドを使用して、適切なバーの位置とメトリック値のUIImageオブジェクトを提供します。バーの位置引数にUIBarPosition値を使用して、提供された画像をウィンドウの下部または上部のどちらで使用するか、上部に表示される場合はステータスバーの下で上に拡張するかどうかを指定します。同様に、バーメトリック引数にUIBarMetrics値を指定することにより、プロンプトの有無にかかわらず、画像をコンパクトまたはデフォルトのバーメトリックに使用するように指定できます。

影を追加するには、サイズ変更可能なUIImageをshadowImageプロパティに提供します。カスタムシャドウ画像を使用するには、カスタム背景画像を指定する必要があります。図4は、カスタム背景画像を含むナビゲーションバーを示しています。これは、setBackgroundImage(_:for:barMetrics :)を使用して提供され、バーの位置の値はUIBarPosition.topAttachedで、バーのメトリック値はUIBarMetrics.defaultです。カスタム画像もshadowImageプロパティに提供されています。

このスクラップは2021/05/16にクローズされました