【问题标题】:Xamarin Forms: scroll position in scrollviewXamarin Forms:滚动视图中的滚动位置
【发布时间】:2014-12-01 13:47:10
【问题描述】:

是否无法读取和设置滚动视图的位置?例如,我想以滚动位置在底部而不是顶部来启动应用程序。

【问题讨论】:

  • 没什么。但我找不到任何看起来像这样做的属性或方法。
  • 对于Android,我找到了一个解决方案:我写了一个自定义渲染器,在OnDraw override Method中,我在第一次调用方法时调用FullScroll(FocusSearchDirection.Down)。

标签: xamarin xamarin.forms scrollview


【解决方案1】:

您可以从 ScrollView 对象的 ScrollX 和 ScrollY 属性中获取 ScrollView 的 X 和 Y 位置。然后你可以使用 ScrollView 方法 ScrollToAsync 设置位置。

var x = scrollView.ScrollX;
var y = scrollView.ScrollY;

...

bool animate = false;
scrollView.ScrollToAsync(x, y, animate);

【讨论】:

    【解决方案2】:

    对于Android,我找到了解决方案:

    我写了一个自定义渲染器,在OnDraw override 方法中,我在第一次调用该方法时调用了FullScroll(FocusSearchDirection.Down)

    这很简单,Android ScrollViewRendererAndroid.Widget.ScrollView 的子类型。

    目前,我不需要 iOS 的实现,所以我没有适用于 iOS 的解决方案。

    【讨论】:

      【解决方案3】:

      我有一个更好的方法!

      您可以将其添加到您的 onAppearing() 方法中:

      protected override void OnAppearing()
          {
              base.OnAppearing();
      
              /*Other stuff*/
      
              viewModel.Messages.CollectionChanged += (sender, e) =>
              {
                  var target = viewModel.Messages[viewModel.Messages.Count - 1];                
      
                  ItemsListView.ScrollTo(target, ScrollToPosition.End, false);
              };            
          }
      

      这意味着,如果您的集合发生变化,您将获得目标,即您使用 scrollTo 目标的最后一项(底部的一项),定位结束,动画为 false。

      当你到达页面时,它会在底部打开,你看不到滚动,因为动画是假的!

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        相关资源
        最近更新 更多