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>

注意:

  1. x:Class=“SuiHanIME.TrialPage”中的SuiHanIME是我的项目的命名空间;
  2. **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);
        }

下面是运行效果

参考资料

我为什么选择Xamarin iOS 10 与 ATS - 更加安全的机制