如何以编程方式刷新应用程序屏幕?
Posted
技术标签:
【中文标题】如何以编程方式刷新应用程序屏幕?【英文标题】:How can I refresh the app screen programmatically? 【发布时间】:2019-11-07 22:53:21 【问题描述】:我的应用程序中的一个 UI 组件有一个轻微但令人讨厌的视觉故障。如果我将设备旋转到横向并回到纵向,故障就会完全消失。那么,也许有一种简单的方法可以以编程方式重现整个场景的完全刷新,而无需强迫用户操作设备并且视觉效果最小?
该组件是用 C# (Xamarin) 编写的,如果这很重要,我无权访问它的代码来修复那里的错误。
【问题讨论】:
你没有给我们任何帮助重现这个问题,这使得很难知道问题是什么。至少,您能详细说明一下“讨厌的视觉故障” 是什么意思吗?我不使用 Xamarin,但像 Objective-C 和 Swift 一样,UIViewController1
和 UIView
都有一个“生命周期”。设备旋转会触发其中的几个 - 特别是如果您使用自动布局(其他您没有详细说明的内容)。更详细的描述肯定会有所帮助。
@dfd 组件是否使用自动布局,我不知道。令人讨厌的视觉故障的细节完全无关紧要,因为它根本不会在旋转之后发生(在组件显示之前发生的旋转),而且无论如何我都不允许更改它的代码。
好吧,首先 - 为了记录,我不是两个反对票之一。只是想帮忙。你付出了多少才能继续下去?这相当困难......要强制刷新,一个可能查看三个方向。 (1) 我已经说过,视图和 VC 生命周期。 (2) 我想可以检查 AppDelegate 和 SceneDelegate,但它们实际上是由操作系统控制的。最后,(3)可能是某种类型的绘制覆盖。当然,总是有最后一个选择——去掉(或替换)组件,这听起来像是第三方的东西。祝你好运。
@dfd 我知道视图和控制器的生命周期。在我的应用程序中,它们的行为是正确的:被(由系统调用)后,它们完全修复了第 3 方故障。我可以强制应用程序切换到横向并返回纵向,但这会立即产生视觉效果。什么我以前从未做过,以编程方式触发生命周期事件,视觉干扰最小。
【参考方案1】:
最后,解决方法是将UIDeviceOrientationDidChangeNotification
发送到默认的NSNotificationCenter。发生这种情况时,Xamarin plugin 期望此通知能够正确调整其窗口几何形状,但它开始得太晚了,并且没有收到系统在应用启动时发送的通知。
【讨论】:
以上是关于如何以编程方式刷新应用程序屏幕?的主要内容,如果未能解决你的问题,请参考以下文章
React Native:登录或注销时如何以编程方式刷新应用程序?