我有一个今天的小部件包含两件事:
UILabel
UITableView
在我的viewWillAppear
中,我将标签设置为可见,并将我的tableView隐藏起来,并将标签文本设置为“正在加载”。见下图。
然后我得到一个位置,当这个完成后,我调用另一个方法和
成功完成后,我有一个如下所示的tableView:
我现在的问题。
当我打开今天的小部件并点击viewWillAppear
时,我并不总是设置我的标签,我得到的唯一结果是这个
。
所以会发生的事情是我只能在tableView中显示我之前的一些结果。
偶尔会发生这种情况,似乎tableView冻结了,我无法更新初始视图,隐藏tableView并显示标签。即使屏幕像这样冻结,一切都在运行,我设法更新tableView和视图。
唯一的问题是,当我打开窗口小部件时屏幕冻结如下:
有时而不是显示我的标签。它的大小与原因一样,是因为我设置了preferredContentSize = CGSizeMake(0, 30)
。否则我打赌它会显示整个上一个tableView。
有关如何解决此问题的任何想法,以便在我点击viewWillAppear
时始终更新视图?
更新
开始另一个赏金,看看是否有关于这个问题的其他输入。
答案 0 :(得分:10)
系统的作用是它需要快照。我也一直在努力解决这个问题,我已经检查了this帖子,但它没有解决我的问题。
对于widgetPerformUpdateWithCompletionHandler
,有三个选项
NCUpdateResultNewData
- 新内容要求您重绘视图NCUpdateResultNoData
- 窗口小部件不需要更新NCUpdateResultFailed
- 更新过程中发生错误这些中的哪一个被称为总是相同的结果无关紧要。 系统会拍摄快照。
为了帮助您的小部件查看最新版本,系统偶尔会捕获 窗口小部件视图的快照。当小部件变得可见时 再次,显示最新的快照,直到系统替换 它有一个实时版本的视图。
要在拍摄快照之前更新窗口小部件的状态,请务必 符合NCWidgetProviding协议。当你的小部件收到 widgetPerformUpdateWithCompletionHandler:调用,更新你的 小部件的视图与最新内容并调用完成 handler,使用以下常量之一来描述结果 更新
我认为我们可能会尝试加载“重”数据,因此可能会发生这种情况。这是我的答案,但我开始赏金以检查其他人是否有其他答案或者您是否同意我的帖子。
答案 1 :(得分:0)
您可以将操作放在viewdidload()
中,因为在您输入窗口小部件时会调用viewdidload()
。