Xamarin.iOS の Appearance API

iOS を使用すると、個々のオブジェクトではなく静的クラス レベルでビジュアル プロパティ設定を適用できるため、変更はアプリケーション内のそのコントロールのすべてのインスタンスに適用されます。

この機能は、Xamarin.iOS で、それをサポートするすべての UIKit コントロールの静的 Appearance プロパティを介して公開されます。 そのため、ビジュアルの外観 (色の濃淡や背景画像などのプロパティ) を簡単にカスタマイズして、アプリケーションに一貫した外観を提供できます。 Appearance API は iOS 5 で導入され、その一部が iOS 9 で非推奨になりましたが、Xamarin.iOS アプリでスタイル設定とテーマ設定の効果を実現する良い方法です。

概要

iOS を使用すると、多くの UIKit コントロールの外観をカスタマイズして、標準コントロールをアプリケーションに適用するブランド化に一致させることができます。

カスタムの外観を適用するには、次の 2 つの方法があります。

  • コントロール インスタンス上で直接 - ツールバー、ナビゲーション バー、ボタン、スライダーなどの多くのコントロールで、色の濃淡、背景画像、タイトルの位置 (およびその他の属性) を設定できます。

  • Appearance 静的プロパティに既定値を設定する – 各コントロールのカスタマイズ可能な属性は、Appearance 静的プロパティを介して公開されます。 これらのプロパティに適用するカスタマイズは、プロパティの設定後に作成されるその型のコントロールの既定値として使用されます。

Appearance サンプル アプリケーションでは、これらのスクリーンショットに示すように、3 つのメソッドがすべて示されています。

Appearance サンプル アプリケーションでは、3 つのメソッドすべてを示します

iOS 8 の時点で、Appearance プロキシは TraitCollections に拡張されています。 AppearanceForTraitCollection を使用して、特定の特性コレクションの既定の外観を設定できます。 この詳細については、ストーリーボードの概要のガイドをご覧ください。

Appearance プロパティの設定

最初の画面では、静的な Appearance クラスを使用して、次のようにボタンと黄色/オレンジの要素のスタイルを設定します。

// Set the default appearance values
UIButton.Appearance.TintColor = UIColor.LightGray;
UIButton.Appearance.SetTitleColor(UIColor.FromRGB(0,127,14), UIControlState.Normal);

UISlider.Appearance.ThumbTintColor = UIColor.Red;
UISlider.Appearance.MinimumTrackTintColor = UIColor.Orange;
UISlider.Appearance.MaximumTrackTintColor = UIColor.Yellow;

UIProgressView.Appearance.ProgressTintColor = UIColor.Yellow;
UIProgressView.Appearance.TrackTintColor = UIColor.Orange;

緑の要素のスタイルは、既定値と Appearance 静的クラスをオーバーライドする ViewDidLoad メソッドで、次のように設定されます。

slider2.ThumbTintColor = UIColor.FromRGB (0,127,70); // dark green
slider2.MinimumTrackTintColor = UIColor.FromRGB (66,255,63);
slider2.MaximumTrackTintColor = UIColor.FromRGB (197,255,132);
progress2.ProgressTintColor = UIColor.FromRGB (66,255,63);
progress2.TrackTintColor = UIColor.FromRGB (197,255,132);

Xamarin.Forms での UIAppearance の使用

Appearance API は、Xamarin.Forms ソリューションで iOS アプリのスタイルを設定するときに便利です。 AppDelegate クラスのうちの数行は、カスタム レンダラーを作成せずに、特定の配色を実装するのに役立ちます。

カスタム テーマと UIAppearance

iOS では、UIAppearance API を使用して、ユーザー インターフェイス コントロールの多くのビジュアル属性を "テーマ化" して、特定のコントロールのすべてのインスタンスの外観を強制的に同じにすることができます。 これは、コントロールの個々のインスタンスではなく、多くのユーザー インターフェイス コントロール クラスの Appearance プロパティとして公開されます。 静的 Appearance プロパティに表示プロパティを設定すると、アプリケーション内のその型のすべてのコントロールに影響します。

この概念をよりよく理解するために、ある例を考えてみましょう。

特定の UISegmentedControl をマゼンタの濃淡に変更するには、次のように ViewDidLoad で画面上の特定のコントロールを参照します。

sg1.TintColor = UIColor.Magenta;

または、デザイナーの [プロパティ] パッドで値を設定します。

Properties Pad の色合い

次の画像は、"sg1" という名前のコントロールのみに濃淡が設定されていることを示しています。

個々のコントロールの色合いを設定する

この方法で多くのコントロールを設定することは完全に非効率的であるため、代わりにクラス自体に静的 Appearance プロパティを設定できます。 これは次のコードに示されています。

UISegmentedControl.Appearance.TintColor = UIColor.Magenta;

次の画像は、外観がマゼンタに設定された両方のセグメント化されたコントロールを示しています。

外観コントロールの色合いを設定する

Appearance プロパティは、AppDelegate の FinishedLaunching イベントや ViewController など、アプリケーション ライフサイクルの早い段階で、影響を受けるコントロールが表示される前に設定する必要があります。

詳細については、Appearance API の概要に関するページをご覧ください。