最近有個新項目是開發(fā)一個 iOS 應用,但由于我沒有任何 iOS 的開發(fā)經(jīng)驗,學習 iOS 開發(fā)也要花很多時間,所以決定試試使用 Xamarin Forms (XF)來開發(fā)一個 iOS 應用,沒想到效果出奇的好,因此打算來分享一下一些 XF 的開發(fā)經(jīng)驗。
XF 是一套跨平臺的開發(fā)框架,只需要編寫一次代碼,包括界面代碼,就能分別生成 Android、iOS、UWP 的原生應用。雖然各個平臺生成出來的界面各有差異,但使用的是各平臺的原生控件,使用體驗也很不錯。不過呢,也因為每個平臺上的特性都是不一樣的,因此 XF 也不可能支持所有平臺的屬性,這時候就需要編寫 Renderer 來針對平臺定義特性與效果。
比如說,XF 里的 TabbedPage,就是帶分頁的頁面,那個分頁欄在不同平臺上的實現(xiàn)方法都是不一樣的,在 iOS 使用的是 UITabBar,Android 使用的是 TabLayout,UWP 上的是 Pivot。UITabBar 支持設定分頁選中時的顏色(TintColor),但 XF 中并沒有提供相關的功能,因此需要自己編寫 Renderer 來實現(xiàn)(也有其他方法實現(xiàn),這里只針對 Renderer 說明)。
這是一個 iOS TabbedPage 的 Renderer 示例,簡單說明一下如何實現(xiàn)自定義控件屬性(雖然 XF 不支持某些屬性,但 Xamarin.Android 和 Xamarin.iOS 是支持所有該平臺上的控件屬性的),我們只需要繼承 XF 已經(jīng)定義好的 TabbedRenderer,再針對 TabBar 屬性修改,就可以基于原來的效果來自定義屬性,其他的控件也可以用類似的方法來定義特定平臺上的效果。
<pre>`
[assembly: ExportRenderer(typeof(TabbedPage), typeof(TabbedPageRenderer))]
namespace FormsDemo.iOS.Renderers {
public class TabbedPageRenderer : TabbedRenderer {
protected override void OnElementChanged(VisualElementChangedEventArgs e) {
base.OnElementChanged(e);
TabBar.TintColor = UIColor.White;
TabBar.UnselectedItemTintColor = UIColor.FromRGBA(255, 255, 255, 160);
}
}
}
`</pre>
未完待續(xù)。。。