最近有个新项目是开发一个 iOS 应用,但由于我没有任何 iOS 的开发经验,学习 iOS 开发也要花很多时间,所以决定试试使用 Xamarin Forms (XF)来开发一个 iOS 应用,没想到效果出奇的好,因此打算来分享一下一些 XF 的开发经验。
XF 是一套跨平台的开发框架,只需要编写一次代码,包括界面代码,就能分别生成 Android、iOS、UWP 的原生应用。虽然各个平台生成出来的界面各有差异,但使用的是各平台的原生控件,使用体验也很不错。不过呢,也因为每个平台上的特性都是不一样的,因此 XF 也不可能支持所有平台的属性,这时候就需要编写 Renderer 来针对平台定义特性与效果。
比如说,XF 里的 TabbedPage,就是带分页的页面,那个分页栏在不同平台上的实现方法都是不一样的,在 iOS 使用的是 UITabBar,Android 使用的是 TabLayout,UWP 上的是 Pivot。UITabBar 支持设定分页选中时的颜色(TintColor),但 XF 中并没有提供相关的功能,因此需要自己编写 Renderer 来实现(也有其他方法实现,这里只针对 Renderer 说明)。
这是一个 iOS TabbedPage 的 Renderer 示例,简单说明一下如何实现自定义控件属性(虽然 XF 不支持某些属性,但 Xamarin.Android 和 Xamarin.iOS 是支持所有该平台上的控件属性的),我们只需要继承 XF 已经定义好的 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>
未完待续。。。