質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.60%

Xamarin.FormsのWebViewで表示したPDFが消えてしまう

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 259

ikarimame

score 28

前提

Xamarin.FormsのプロジェクトでTabbledPageを使用してHOMEタブ、PDFタブを作成し、PDFタブに張り付けたWebViewのSourceにPDFのURLを指定することでPDFを表示したいと思っています。

MainPage.xaml

<?xml version="1.0" encoding="utf-8"?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="clr-namespace:TabAplication"
            x:Class="TabAplication.MainPage">
    <TabbedPage.BindingContext>
        <local:VM/>
    </TabbedPage.BindingContext>
    <ContentPage Title="Home">
        <Grid>
            <Label HorizontalOptions="Center" VerticalOptions="Center" Text="This is Home"/>
        </Grid>
    </ContentPage>
    <ContentPage Title="PDF">
        <Grid>
            <WebView Source="{Binding PDFURL}"/>
        </Grid>
    </ContentPage>
</TabbedPage>

VM.cs

using System;
using System.ComponentModel;
using System.Threading.Tasks;

namespace TabAplication
{
    public class VM : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private void RaisePropChanged(string name)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }

        public VM()
        {
        }

        private string _pdfurl = @"ここにPDFのURLを設定";
        public string PDFURL
        {
            get { return _pdfurl; }
            set { _pdfurl = value; RaisePropChanged("PDFURL"); }
        }
    }
}

発生している問題

問題の発生はiOSのシミュレータで確認しました。

VM.PDFURLの初期値を設定することで、設定したURLのPDFが表示されます。
しかしその後タブを切り替えてWebViewを非表示にするような操作を行うと、表示されていたPDFが消えてしまいます。

WebView.Reload()を呼んでみたりもしたのですが、どうにも消えたままで、表示されることはありませんでした。

PDFURLに別のURLを新たに設定すると表示されるようになりますが、タブを切り替えたりするとまた同様の問題が発生します。

この問題はなぜ発生するのでしょうか?回避するにはURLを再設定する以外にないのでしょうか?

補足情報

iPhone実機なし
macOS Catalina v10.15.7
Visual Studio for mac v8.7.8(build 4)
Xcode v12.0.1(12A7300)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

通常のSwiftでも問題として挙げられていた様です。

PDF in WKWebview Disappears when Switching Tabs

簡単な解決策は、表示時にURLを再設定したり、リロードするしかないのかと思います。

<?xml version="1.0" encoding="utf-8"?>
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:local="clr-namespace:TabAplication"
            x:Class="TabAplication.MainPage">
    <TabbedPage.BindingContext>
        <local:VM/>
    </TabbedPage.BindingContext>
    <ContentPage Title="Home">
        <Grid>
            <Label HorizontalOptions="Center" VerticalOptions="Center" Text="This is Home"/>
        </Grid>
    </ContentPage>
    <ContentPage Title="PDF" Appearing="ContentPage_Appearing">
        <Grid>
            <WebView x:Name="webView" Source="{Binding PDFURL}"/>
        </Grid>
    </ContentPage>
</TabbedPage>
public partial class MainPage : TabbedPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    void ContentPage_Appearing(System.Object sender, System.EventArgs e)
    {
        webView.Reload();
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/10/26 12:03 編集

    ありがとうございます、WKWebViewで起きている問題なんですね。

    私の方で試しにReloadを組込んでみたときは動作しなかったんですが、f-miyu様のソースを参考に組み込んでみたところReloadでもうまく動作しました。

    URLの再設定もしくはReloadの場合以前のスクロール状態がリセットされるなど状況によっては使いづらい事態が発生してしまいますが、ひとまず非表示のままという問題自体は解決するのでこの方法で様子見したいと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る