【问题标题】:How do you implement a custom renderer for webview (which is displaying raw html elements on the page) in Xamarin.Forms.iOS?如何在 Xamarin.Forms.iOS 中为 webview(在页面上显示原始 html 元素)实现自定义渲染器?
【发布时间】:2020-12-29 03:04:26
【问题描述】:

我在 Xamarin.Forms 中使用 WebView 来显示 html。它不会显示整个 html 页面——只是显示通常在 html 页面的“body”部分中的内容(即<h1>Hello</h1>)。

但是,当webview显示在页面上时,显示的html太小了。此外,还有一个问题是 webview 没有填满整个页面,即使它应该填满。 *这两个问题都不会在 Android 中出现。

以下是iOS中webview显示html方式的一些截图:

simple html paragraph text

larger html element which does not extend to fill the entire page

这是我的 xaml 文件中的代码:

    <WebView x:Name="webView" HeightRequest="1000" WidthRequest="1000">
        <WebView.Source>
            <HtmlWebViewSource x:Name="announcementHtml"/>
        </WebView.Source>
    </WebView>

在后面的代码中,将一个名为“announcement”的参数传递给页面的构造函数,我使用以下代码访问原始 html: announcementHtml.Html = announcement.Announcement;

您可以在自己的项目中复制这一点,只需在新页面上创建 web 视图并在 html 元素中硬编码(如

, 等)。

我知道使用自定义渲染器是解决这些问题的方法(或者至少是html大小的问题),但我不知道如何实现自定义渲染器。

任何帮助将不胜感激!

【问题讨论】:

标签: html xamarin.forms xamarin.ios uiwebview custom-renderer


【解决方案1】:

最简单的Webview自定义渲染器,你可以在那里自定义webview:

[assembly: ExportRenderer(typeof(WebView), typeof(MyWebViewRenderer))]
namespace App379.iOS
{
    public class MyWebViewRenderer : WkWebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {

                this.ContentMode = UIViewContentMode.ScaleToFill;

            }
        }
    }
}

参考:Customizing a WebView

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多