Xamarin.Form的好处是可以开发跨平台的应用,但针对不同的平台,还需要做一些调整。如果你对Xamarin不了解的话,可以看我写的另一篇文章《我为什么选择Xamarin》。本文将主要介绍WebView在iOS平台上的使用方法。
需求
在我维护的项目中,我需要打开我在简书上写的应用教程,以供用户学习,为此,我需要在应用中嵌入一个WebView。
实现
我在Forms工程中新建了一个名为TrialPage的Xaml文件;
打开这个文件,添加如下代码:
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="SuiHanIME.TrialPage">
<StackLayout
Orientation="Vertical"
BackgroundColor="Black">
<WebView
Source="http://www.jianshu.com/p/2f136bd2b121"
VerticalOptions="FillAndExpand" />
</StackLayout>
</ContentPage>
注意:
- x:Class="SuiHanIME.TrialPage"中的SuiHanIME是我的项目的命名空间;
- Source="http://www.jianshu.com/p/2f136bd2b121"声明了打开这个ContentPage时WebView要加载的网页地址;
针对iOS平台的特殊处理
由于iOS平台上引入了ATS(ATS 全称 App Transport Security,是 iOS 9 引入的一套安全机制,默认行为会强制保证所有的网络请求都使用 HTTPS。),所以在这里我们需要做一些处理才能使WebView正常工作;
我们打开iOS工程中的info.plist文件,加入如下代码:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
加入后在Xamarin.Studio上看到的显示是这样的:
NSAllowsArbitraryLoadsInWebContent是声明我们的应用可以加载任何类型的页面。
接着,我们就可以在应用中调用代码打开这个ContentPage了;这里我使用的是Navigation.PushAsync()方法;
async void TrialButton_Clicked(object sender, System.EventArgs e) {
await Navigation.PushAsync(new TrialPage(), true);
}
下面是运行效果