Xamarin iOS刷新控件被卡住

Xamarin iOS刷新控件被卡住,xamarin,xamarin.ios,uirefreshcontrol,Xamarin,Xamarin.ios,Uirefreshcontrol,我的刷新控制有问题。。。我有以下代码: 在ViewDidLoad()中,我调用方法InitializeRefreshControl() private void InitializeRefreshControl() { if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0)) { //UIRefreshControl iOS6 ordersCollectionV

我的刷新控制有问题。。。我有以下代码:

ViewDidLoad()中,我调用方法InitializeRefreshControl()

private void InitializeRefreshControl()
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0))
        {
            //UIRefreshControl iOS6
            ordersCollectionView.RefreshControl = new UIRefreshControl();
            ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Pull To Refresh",
            new UIStringAttributes()
            {
                ForegroundColor = UIColor.Red,
                KerningAdjustment = 3
             });
            ordersCollectionView.RefreshControl.ValueChanged += HandleValueChanged;
        }
        else
        {
            // old style refresh button and no PassKit for older iOS
            NavigationItem.SetRightBarButtonItem(new UIBarButtonItem(UIBarButtonSystemItem.Refresh), false);
            NavigationItem.RightBarButtonItem.Clicked += (sender, e) => { Refresh(); };
        }
    }
HandleValueChange方法和刷新方法如下:

private void HandleValueChanged(object sender, EventArgs e)
    {
        ordersCollectionView.RefreshControl.BeginRefreshing();
        ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Refreshing",
            new UIStringAttributes()
            {
                ForegroundColor = UIColor.Blue,
                KerningAdjustment = 5
            });

        Refresh();
        ordersCollectionView.RefreshControl.EndRefreshing();
    }

    private void Refresh()
    {
        var viewModel = (OrdersViewModel)DataContext;
        viewModel.OnReloadData();
    }

我的问题是,当我下拉collectionVIew时,显示刷新加载,但没有加载效果,仍然显示文本“pull to Refresh”。当方法刷新结束时,0,1ms显示加载效果和文本“刷新”,但不是在方法刷新之前。。。有人知道如何解决这个问题吗?感谢您的回答。

问题似乎与
刷新()有关同步的方法。您需要在后台执行此操作,以便UI线程可以自由地为RefreshControl提供动画。例如:

private async void HandleValueChanged(object sender, EventArgs e)
{
    ordersCollectionView.RefreshControl.BeginRefreshing();
    ordersCollectionView.RefreshControl.AttributedTitle = new NSAttributedString("Refreshing",
        new UIStringAttributes()
        {
            ForegroundColor = UIColor.Blue,
            KerningAdjustment = 5
        });

    // await a Task so that operation is done in the background
    await Refresh();
    ordersCollectionView.RefreshControl.EndRefreshing();
}

// Marked async and Task returning
private async Task Refresh()
{
    var viewModel = (OrdersViewModel)DataContext;
    // Need to update this method to be a Task returning, async method.
    await viewModel.OnReloadData();
}
上面的代码重构了您必须使用的异步/等待和任务。您可能需要重构更多的代码,包括
OnReloadData()
方法


有很多资源可用于开始使用任务、异步和等待。我可以从Xamarin博客上的参考资料开始介绍。

还是一样:/I这很奇怪。。但是,当我将INSTEADOFREFRESH()方法代码与计时器一起放入时,它会工作。。。。var timer=NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(5.0),委托{ordersCollectionView.RefreshControl.EndRefreshing();});用您尝试过的内容更新您的帖子。听起来刷新方法仍然是同步的。计时器不会,这可能就是它工作方式不同的原因。