【问题标题】:OnNavigatedTo called before page has loaded in iOS在页面加载到 iOS 之前调用 OnNavigatedTo
【发布时间】:2017-01-08 15:38:23
【问题描述】:

我注意到,在 iPhone 上运行 iOS 版本时,我的视图模型正在加载,并且 OnNavigatedTo 在页面实际显示在屏幕上之前被调用,当 OnNavigatedTo 中的逻辑不存在时,它会导致一些奇怪的行为'不对应屏幕上的内容。

首先,这是正确的行为吗?

其次,有什么方法可以确定页面实际显示的时间?

【问题讨论】:

  • 我有一个非常相似的问题。我在堆栈上只有一个登录页面。成功登录后,我 NavigateAsync() 到一个绝对路径以消除登录页面并替换为 /MainPage/NavigationPage/LandingPage。当发生此导航时,即使在 LandingPage.OnNavigatedTo() 正在执行时,登录页面仍然在视图中。这会导致我应用加载指示器的方式出现问题,因为指示器在登录页面消失之前短暂显示,然后在代码执行时未按预期显示在登陆页面上。

标签: c# ios xamarin.forms prism


【解决方案1】:

在调用 Xamarin.Forms Navigation.PushModalAsync 或 Navigation.PushAsync 之后直接调用 OnNavigatedTo。这是导航过程的最后一步。你可以在这里看到:

https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs#L353

根据您的视图有多复杂以及需要渲染多少,它可能会导致您的视图渲染延迟。我不确定 OnNavigatedTo 中的任何代码如何导致任何奇怪的行为,因为至少您的所有数据都应该已经加载并准备好显示。

【讨论】:

  • 所以没有办法知道它什么时候渲染?我有两页有问题。第一个使用混合网络视图,我想在加载后执行一些 javascript。第二个开始轮询连接并停止页面加载。我猜第二个可能是意外阻塞主线程的问题,但仍然可以通过渲染事件解决。
  • 我想不到。甚至 Page.OnAppearing 也发生在 Page 变得可见之前。 developer.xamarin.com/api/member/Xamarin.Forms.Page.OnAppearing 无论页面何时可见,您的第二个问题都可以通过使其异步来解决。
猜你喜欢
  • 2019-11-28
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
相关资源
最近更新 更多