Maui ScrollView - 内容动态更改时滚动条长度不更新

Maui ScrollView - Scrollbar length not updating when content dynamically changed

我尝试 this content 使用 TwoWay 模式。
我用的是ObservableCollection,当我修改内容时更新了,但是滚动长度没有更新。

右滚动条太长。
如何更新滚动条长度?

<ScrollView BackgroundColor="LightGray" x:Name="InfoStack">
        <StackLayout
            BindableLayout.ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
            <BindableLayout.ItemTemplate>
                <DataTemplate>
                    <.../>
                </DataTemplate>
            </BindableLayout.ItemTemplate>
        </StackLayout>
    </ScrollView>

更改内容后,可能修复它:

(InfoStack as IView).InvalidateArrange();

HACK:如果这没有任何作用,请稍微延迟一下:

Dispatcher.Dispatch(async() =>
{
    await Task.Delay(100);
    (InfoStack as IView).InvalidateArrange();
}

(虽然涉及时间延迟的黑客攻击并不可靠,但如果第一个不起作用,但这个确实有效,那可能有助于确定“真正的”问题。)

它在不同平台上的行为不同。

我确实在 Windows desktopiOSAndroid 模拟器上测试了您的代码。

结果是它仅适用于 Windows 桌面 ,ScrollView 不会按预期在 iOS 和 Android 上动态扩展。

好像是 potential issue ,考虑在 github 上解决这个问题:https://github.com/dotnet/maui/issues .

解决方法

使用 CollectionView 代替 ScrollView

<CollectionView ItemsSource="{Binding Source={x:Static local:InfoHelpers.Ints}, Mode=TwoWay}">
   <CollectionView.ItemTemplate>
      <DataTemplate>      
          <Label Text="{Binding .}" HeightRequest="40"/>             
      </DataTemplate>
   </CollectionView.ItemTemplate>
</CollectionView>