UIRefreshControl闪烁并且过渡突然

时间:2018-12-28 11:18:14

标签: ios swift xcode uirefreshcontrol

我想在我的应用程序的主表视图控制器中设置UIRefreshControl,以触发刷新功能以(您现在可能已经猜到了)刷新它。

添加它不是问题,我可以通过情节提要(通过启用刷新)或在控制器中(通过使用self.refreshControl = UIRefreshControl())对其进行设置。

当它被用户触发时,它将开始正常刷新,但是当我通过self.refreshControl.beginRefreshing()触发它时,该控件不会显示在导航栏中,直到我向下滚动(就像您通常触发它一样)< / p>

但这还不是最奇怪的部分。最终对用户可见时,它会不断闪烁,过一会儿根本看不到。

对于self.refreshControl.endRefreshing()方法,该动画实际上会突然断断续续,有时导航栏不会再次向上滚动(顶部留有空白)

这是一个gif,应该总结my problem

我使用swift 4.2,该应用程序已在不同的模拟器(运行iOS 12.1)和我的iPhone X(运行iOS 12.1.2)上进行了测试,发布目标是iOS 10.0。

我已经对我的问题进行了研究,但似乎没有人遇到确切的问题(至少是闪烁的问题),或者解决方案对我不起作用。

这是我的视图控制器的设置方式:

class MyViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        self.refreshControl = UIRefreshControl()
        self.refreshControl?.addTarget(self, action: #selector(reload), for: .valueChanged)

        self.refreshControl.beginRefreshing()
    }


    @objc func reload() {

        DispatchQueue(label: "update").async {

            sleep(10)

            DispatchQueue.main.async {
                self.refreshControl?.endRefreshing()
            }
        }
    }
}

感谢阅读,我真的希望有人能帮助我。

更新

我刚刚发现问题仅出现在具有大标题的非半透明导航栏上,因此选择一个半透明导航栏而不是不透明导航栏是一个解决方案(很不幸,我不希望这样)。也许有人可以使用不透明的导航栏来实现功能性的刷新控件。

此外,我还向Apple提交了一个错误报告,因为这样的事情首先不应该发生,当他们回到我身边时,我将对其进行更新。

0 个答案:

没有答案