这似乎应该很简单,但TableView上没有ScrollTo
方法,就像ListView一样。
如何将TableView滚动到顶部?
答案 0 :(得分:2)
表单'TableView的设计不像滚动视图那样,即使它们是使用可滚动容器本地实现的。
虽然自定义渲染器是我首选的,因为效果开销而公开滚动功能,但使用PlatformEffect
的快速MessagingCenter
黑客将作为演示工作:
在Android上,表单'TableView使用Android.Widget.ListView
作为其顶级容器,因此可以使用ListView.SmoothScrollToPosition
。
public class ScrollTopEffect : PlatformEffect
{
void ScrollToTop(TableView obj)
{
(Control as AListView).SmoothScrollToPosition(0);
}
protected override void OnAttached()
{
if (Element is TableView)
MessagingCenter.Subscribe<TableView>(Element as TableView, "ScrollTop", ScrollToTop);
else
throw new Exception("ScrollTopEffect must be used on a TableView (Android.Widget.ListView)");
}
protected override void OnDetached()
{
MessagingCenter.Unsubscribe<TableView>(Element as TableView, "ScrollTop");
}
}
MessagingCenter.Send<TableView>(tableView, "ScrollTop");
注意:实例tableView
var必须是您希望滚动到顶部的实例。
在iOS上,Forms使用UITableView
作为TableView的顶级容器,因此您可以使用`UITableView.SetContentOffset``滚动到顶部。
public class ScrollTopEffect : PlatformEffect
{
void ScrollToTop(TableView obj)
{
(Control as UITableView).SetContentOffset(CGPoint.Empty, true);
}
protected override void OnAttached()
{
if (Element is TableView)
MessagingCenter.Subscribe<TableView>(Element as TableView, "ScrollTop", ScrollToTop);
else
throw new Exception("ScrollTopEffect must be used on a TableView (UIkit.UITableView)");
}
protected override void OnDetached()
{
MessagingCenter.Unsubscribe<TableView>(Element as TableView, "ScrollTop");
}
}