2016-10-20 23 views
0

我自己回答了這個問題 - 現在就把它留在這裏,面向有同樣問題的人。

我的代碼非常簡單 - 一個自定義表,其中包含一個數據源以便從Web服務異步提供數據。如何讓我的RefreshControl在ViewDidAppear期間出現

爲了獲得最好的用戶體驗,我希望UIRefreshControl可以在每當此控制器出現時加載動畫,而不是僅在列表被拉下時進行加載。

不幸的是,如果我在ViewDidAppear期間撥打我的方法,則不會出現UIRefreshControl

我試圖從答案建議這些問題,但沒有人似乎爲我工作:

public partial class ControlCenterSelectionController : UITableViewController 
{ 
    public ControlCenterSelectionController (IntPtr handle) : base (handle) 
    { 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     TableView.RefreshControl = new UIRefreshControl(); 
     TableView.RefreshControl.ValueChanged += RefreshControlOnValueChanged; 
    } 

    private async void RefreshControlOnValueChanged(object sender, EventArgs eventArgs) 
    { 
     await UpdateDataSourceAsync(); 
    } 

    public override async void ViewDidAppear(bool animated) 
    { 
     base.ViewDidAppear(animated); 
     TableView.SetContentOffset(new CGPoint(0, -TableView.RefreshControl.Frame.Size.Height), true); 
     await UpdateDataSourceAsync(); 
    } 

    private async Task UpdateDataSourceAsync() 
    { 
     TableView.RefreshControl.BeginRefreshing(); 
     var ccClient = DI.Instance.Get<IControlCenterRestClient>(); 
     var controlCenters = await ccClient.GetAllAsync(); 
     var source = new GenericViewSource<ControlCenter>(controlCenters, item => item.Name, ControlCenterSelected); 
     TableView.Source = source; 
     TableView.RefreshControl.EndRefreshing(); 
    } 

    private void ControlCenterSelected(ControlCenter controlCenter) 
    { 
     var controller = this.InstantiateController(Constants.ViewControllerIds.ControlCenter) as ControlCenterController; 
     controller.ControlCenter = controlCenter; 
     this.NavigateTo(controller); 
    } 
} 

所有我目前得到的是一個看起來空的屏幕,加載數據沒有ind然後在完成後更新屏幕。

有人可以發現一個錯誤?我找不到一個,因爲這個代碼很簡單。

回答

0

張貼在SO +絕望編碼嘗試的絕望是關鍵:

public override async void ViewDidAppear(bool animated) 
    { 
     base.ViewDidAppear(animated); 
     TableView.SetContentOffset(new CGPoint(0, -(TableView.RefreshControl.Frame.Size.Height + 20)), true); 
     TableView.RefreshControl.BeginRefreshing(); 
     await UpdateDataSourceAsync(); 
    } 

    private async Task UpdateDataSourceAsync() 
    { 
     var ccClient = DI.Instance.Get<IControlCenterRestClient>(); 
     var controlCenters = await ccClient.GetAllAsync(); 
     var source = new GenericViewSource<ControlCenter>(controlCenters, item => item.Name, ControlCenterSelected); 
     TableView.Source = source; 
     TableView.RefreshControl.EndRefreshing(); 
    } 

這種變化特別製作的區別:

-(TableView.RefreshControl.Frame.Size.Height + 20) 

事實證明,而在其他問題通過簡單地應用基於RefreshControl的滾動來解決問題會觸發動畫,在我的情況下,我不得不添加一些額外的y delta來使動畫成爲火焰。

修正

這種額外的偏移,似乎如果延伸的邊緣設置在頂部條延伸到僅需要。

相關問題