Xamarin.Forms iOSでEditorがスクロールしない不具合の解決策

今回はEditorの不具合に関する対策について話します。

Xamarin.Forms Ver4.3.0.908675以降から、iOSでEditorの入力範囲より長いテキストを初期値に入れてEditorを表示した場合、一度改行などを入力しない限り、スクロールがされないという不具合があります。

この不具合はこの記事を書いている現時点においてもまだ修正されていません。

この不具合に関しては根本的な解決策ではないのですが、スクロールが効くようにできる解決策があるので、その方法について紹介します。

CustomRendererを使用して対応します。Rendererのコードはこちらです。

public class MyEditorRenderer : EditorRenderer {

    protected override void OnElementChanged(ElementChangedEventArgs<Editor> e) {
        base.OnElementChanged(e);

        if (Control != null && e.NewElement != null) {
            Element.SizeChanged += HandleElementSizeChanged;
        }
    }

    private async void HandleElementSizeChanged(object sender, EventArgs e) {
        var text = Control.Text;
        await System.Threading.Tasks.Task.Delay(400);
        Control.Text = text + "\n";
        await System.Threading.Tasks.Task.Delay(400);
        Control.Text = text;
    }

    protected override void Dispose(bool disposing) {
        if (Element != null) {
            Element.SizeChanged -= Handle_Element_SizeChanged;
        }
        base.Dispose(disposing);
    }
}

EditorのSizeChangedが走った際に、Textに改行を追加して文字を入れ、その後元のテキストに戻します。

こうすることで、一度改行が入力されたことになるので、スクロールができるようになります。

あくまで一時的な対応にはなるので、このバグが修正されたらFormsのバージョンをアップし、こちらの暫定処理は消すようにしましょう。

タイトルとURLをコピーしました