【问题标题】:Xamarin Forms - ScrollView - ScrollToAsync to bottom not working as expectedXamarin Forms - ScrollView - ScrollToAsync 到底部未按预期工作
【发布时间】:2017-10-31 15:52:21
【问题描述】:

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

await scrollView.ScrollToAsync(stkMain, ScrollToPosition.End, true);

下面的图片会提供更多关于它的想法。

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

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

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

【问题讨论】:

  • 您是否尝试获取stkMain 的最后一个孩子并滚动到它?
  • 我忘记提及的一件事是,当我在调试模式下创建具有 scrollToAsync 方法的点时。断点击中那条线,如果我按 F5 将使最后一个元素可见。我很惊讶地看到它,但它确实发生了。
  • 这并不奇怪。请记住,渲染方法通常是异步的,并且后面的代码可以在元素在渲染屏幕上可用之前运行。我知道这不是最好的解决方案,但有时我会在运行任何视觉交互之前强制延迟 300 毫秒。 (抱歉英语不好,我还在学习=D)
  • 添加延迟会对我有所帮助。
  • 同样的问题,@diego 的解决方案不起作用:/

标签: xamarin.forms scrollview


【解决方案1】:

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

类似这样的:

var lastChild = stkMain.Children.LastOrDefault();
if(lastChild != null)
    scrollView.ScrollToAsync(lastChild, ScrollToPosition.MakeVisible, true);

【讨论】:

  • 让我试着回复你。
  • 我正在使用 Horizo​​ntal ScrollView 而在 iOS 上这不起作用。
  • 添加添加元素和滚动之间的延迟为我解决了它:-)
【解决方案2】:

如果你想滚动到底部试试

        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);
            }

        });

【讨论】:

  • 更新了我现场项目的最新解决方案
  • await Task.Delay(10); 行的具体细节是什么?
  • 好的,从头开始......整个事情在没有那么一点延迟的情况下停止在 iOS 上运行......疯了。
  • 我非常讨厌这个 Task.Delay-hacks,但老实说,这是我让它工作的唯一方法。谢谢你的确认,尼克。
  • 不会讨厌这个技巧,它对于其他情况也很有用,比如在执行代码时更改绑定值后更新 ui,还有一些就像 xamarin 表单一样工作 :)
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2023-03-20
  • 2019-11-09
  • 1970-01-01
相关资源
最近更新 更多