はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】UI ToolkitのScrollViewを強制的に再描画させる方法

はじめに

UI Toolkitを使用していて、ScrollViewScrollbarを再描画したいと思い以下のコードを書きました。

var scrollView = uxml.Q("SampleScrollView");
scrollView.MarkDirtyRepaint();

割と名前から推測してしまっていますが、これだと特に動作しないようです。

なかなか情報が見つからず大変でしたが、解決方法を見つけたので書き残しておきたいと思います。

解決方法

以下のメソッドを定義して呼び出せばOKです。

private static void ForceUpdate(ScrollView view)
{
    view.schedule.Execute(() =>
    {
        var fakeOldRect = Rect.zero;
        var fakeNewRect = view.layout;

        using var evt = GeometryChangedEvent.GetPooled(fakeOldRect, fakeNewRect);
        evt.target = view.contentContainer;
        view.contentContainer.SendEvent(evt);
    });
}

https://discussions.unity.com/t/how-to-refresh-scrollview-scrollbars-to-reflect-changed-content-width-and-height/876749/16