Xamarin Forms - ScrollView - ScrollToAsync 到底部没有按预期工作

Rav*_*gra 8 scrollview xamarin.forms

我有一个屏幕,它使用堆栈布局和滚动视图显示评论列表。用户可以再添加一条评论,然后单击提交会在 Xamarin Forms - Android 和 iOS 应用程序的此滚动视图的末尾再添加一条评论。要求是向上滚动此列表以显示最新的显示评论元素。为此,我使用了下面的代码行,但它不会向上滚动到最后一个元素而是倒数第二个元素。我在 IOS 和 Android 中都观察到了它。

await scrollView.ScrollToAsync(stkMain, ScrollToPosition.End, true);
Run Code Online (Sandbox Code Playgroud)

下面的图片会给出更多关于它的想法。

在此处输入图片说明

如图所示,虽然我已经使用上面的代码滚动到最后,但堆栈布局 3 在屏幕上不可见。我必须向上滚动滚动视图才能看到堆栈布局 3。

预期行为 - 滚动视图应滚动直到完成屏幕上显示的最后一个元素。请建议如果我做得不对。

我忘记提及的一件事是,当我在调试模式下创建具有 scrolToAsync 方法的行时。断点击中那条线,如果我点击 F5 将使最后一个元素可见。我很惊讶地看到它,但它发生了

Die*_*uza 16

在添加新评论元素操作完成后添加一些延迟,然后尝试滚动到 , 的最后一个子元素stkMain

像这样的东西:

var lastChild = stkMain.Children.LastOrDefault();
if(lastChild != null)
    scrollView.ScrollToAsync(lastChild, ScrollToPosition.MakeVisible, true);
Run Code Online (Sandbox Code Playgroud)


Nic*_*sky 11

如果您只想滚动到底部,请尝试

        Device.BeginInvokeOnMainThread(async () =>
        {
            // Update your children here, add more or remove.
            // todo

            if (Device.RuntimePlatform == Device.Android)
            {
                await scrollView.ScrollToAsync(0, stkMain.Height, true);
            }
            else
            {
                await Task.Delay(10); //UI will be updated by Xamarin
                await scrollView.ScrollToAsync(stkMain, ScrollToPosition.End, true);
            }

        });
Run Code Online (Sandbox Code Playgroud)

  • 好吧,从头开始……整个事情在 iOS 上停止工作,没有一点延迟……疯狂。 (2认同)