Xamarin.Form的好處是可以開發(fā)跨平臺(tái)的應(yīng)用,但針對(duì)不同的平臺(tái),還需要做一些調(diào)整。如果你對(duì)Xamarin不了解的話,可以看我寫的另一篇文章《我為什么選擇Xamarin》。本文將主要介紹WebView在iOS平臺(tái)上的使用方法。
需求
在我維護(hù)的項(xiàng)目中,我需要打開我在簡(jiǎn)書上寫的應(yīng)用教程,以供用戶學(xué)習(xí),為此,我需要在應(yīng)用中嵌入一個(gè)WebView。
實(shí)現(xiàn)
我在Forms工程中新建了一個(gè)名為TrialPage的Xaml文件;

打開這個(gè)文件,添加如下代碼:
<?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.itdecent.cn/p/2f136bd2b121"
VerticalOptions="FillAndExpand" />
</StackLayout>
</ContentPage>
注意:
- x:Class="SuiHanIME.TrialPage"中的SuiHanIME是我的項(xiàng)目的命名空間;
- Source="http://www.itdecent.cn/p/2f136bd2b121"聲明了打開這個(gè)ContentPage時(shí)WebView要加載的網(wǎng)頁地址;
針對(duì)iOS平臺(tái)的特殊處理
由于iOS平臺(tái)上引入了ATS(ATS 全稱 App Transport Security,是 iOS 9 引入的一套安全機(jī)制,默認(rèn)行為會(huì)強(qiáng)制保證所有的網(wǎng)絡(luò)請(qǐng)求都使用 HTTPS。),所以在這里我們需要做一些處理才能使WebView正常工作;
我們打開iOS工程中的info.plist文件,加入如下代碼:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoadsInWebContent</key>
<true/>
</dict>
加入后在Xamarin.Studio上看到的顯示是這樣的:

NSAllowsArbitraryLoadsInWebContent是聲明我們的應(yīng)用可以加載任何類型的頁面。
接著,我們就可以在應(yīng)用中調(diào)用代碼打開這個(gè)ContentPage了;這里我使用的是Navigation.PushAsync()方法;
async void TrialButton_Clicked(object sender, System.EventArgs e) {
await Navigation.PushAsync(new TrialPage(), true);
}
下面是運(yùn)行效果