gpt4 book ai didi

ios - 如何让我的 RefreshControl 在 ViewDidAppear 期间出现

转载 作者:行者123 更新时间:2023-11-29 11:53:21 24 4
gpt4 key购买 nike

我自己已经回答了这个问题 - 现在把它留在这里以供有同样问题的人使用。

我的代码相当简单 - 一个带有数据源的自定义表,用于从 Web 服务异步提供数据。

为了获得最好的用户体验,我想让 UIRefreshControl 在这个 Controller 出现时动画加载过程,而不是仅在列表被拉下时。

不幸的是,如果我在 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);
}
}

我目前得到的只是一个看起来空的屏幕,加载数据时没有任何指示,然后在完成后更新屏幕。

有人能发现错误吗?我真的找不到,因为这段代码相当简单。

最佳答案

在 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 增量来使动画触发。

更正

只有当扩展边缘设置为在顶部条下延伸时,才需要这个额外的偏移量。

关于ios - 如何让我的 RefreshControl 在 ViewDidAppear 期间出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com