Xamarin.iOS 中的外觀 API
iOS 可讓您在靜態類別層級而非個別物件上套用視覺屬性設定,讓變更套用至應用程式中該控件的所有實例。
此功能會透過支援此功能的所有UIKit控制項上的靜態 Appearance
屬性,在 Xamarin.iOS 中公開。 因此,視覺效果外觀(如色調色彩和背景影像的屬性)可以輕鬆地自定義,讓您的應用程式看起來一致。 外觀 API 是在 iOS 5 中引進的,雖然 iOS 9 中有些部分已被取代,但在 Xamarin.iOS 應用程式中達到一些樣式和主題效果仍是一個很好的方法。
概觀
iOS 可讓您自定義許多 UIKit 控制件的外觀,讓標準控件符合您想要套用至應用程式的商標。
有兩種不同的方式可以套用自定義外觀:
直接在控件實例 上 – 您可以在許多控件上設定色調色彩、背景影像和標題位置(以及一些其他屬性),包括工具列、導覽列、按鈕和滑桿。
設定外觀靜態屬性 的預設值 – 每個控件的可自定義屬性都會透過
Appearance
靜態屬性公開。 您套用至這些屬性的任何自定義專案,都會作為設定屬性之後所建立之該類型之任何控件的預設值。
外觀範例應用程式會示範這三種方法,如下列螢幕快照所示:
從 iOS 8 開始,外觀 Proxy 已延伸至 TraitCollections。
AppearanceForTraitCollection
可用來在特定特性集合上設定預設外觀。 您可以在分鏡文本簡介指南中深入瞭解此內容。
設定外觀屬性
在第一個畫面中,靜態外觀類別是用來設定按鈕和黃色/橙色元素的樣式,如下所示:
// 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;
綠色項目樣式會設定如下,在 ViewDidLoad
覆寫預設值和 Appearance 靜態類別的 方法中:
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
在 Xamarin.Forms 解決方案中設定 iOS 應用程式的樣式時,外觀 API 會很有用。 類別中的 AppDelegate
幾行有助於實作特定的色彩配置,而不需要建立 自定義轉譯器。
自定義主題和UIAppearance
iOS 可讓使用者介面控件的許多視覺屬性使用 UIAppearance API 來「主題」,強制特定控件的所有實例具有相同的外觀。 這會公開為許多使用者介面控件類別的 Appearance 屬性,而不是在控件的個別實例上公開。 在靜態 Appearance
屬性上設定顯示屬性會影響應用程式中該類型的所有控件。
若要進一步瞭解概念,請考慮範例。
若要將特定的 UISegmentedControl
變更為具有 Magenta 色調,我們會參考畫面上的特定控件,如下所示:ViewDidLoad
sg1.TintColor = UIColor.Magenta;
或者,在設計工具的 [屬性] 面板上設定值:
下圖說明這隻會在名為 『sg1』 的控制件上設定色調。
若要以這種方式設定許多控件會完全沒有效率,因此我們可以改為在類別本身上設定靜態 Appearance
屬性。 如下列程式代碼所示:
UISegmentedControl.Appearance.TintColor = UIColor.Magenta;
下圖現在說明這兩個區段控件,其外觀設定為Magenta:
Appearance
屬性應該在應用程式生命週期的早期設定,例如 AppDelegate FinishedLaunching
的事件,或在 ViewController 中設定受影響的控件顯示之前。
如需 詳細資訊,請參閱外觀 API 簡介。