小编典典

延迟使用InstantiateViewControllerWithIdentifier而不执行performSegueWithIdentifier吗?

swift

下面的代码用于将另一个视图控制器推入导航堆栈。

使用时instantiateViewControllerWithIdentifier,第一次的速度明显较慢(〜3秒),但随后的每次速度都相当快。其他SO职位建议确保序号发生在代码完成的主线程上,但这不能解决问题。

但是,使用performSegueWithIdentifier不会引起延迟。

第一次和后续推送的viewDidLoad代码SendViewController相同。

尝试消隐viewDidLoad目标视图控制器,但仍然存在,instantiateViewControllerWithIdentifier但不存在滞后performSegueWithIdentifier

如何解决延迟instantiateViewControllerWithIdentifier

没有延迟:

@IBAction func buttonTapped(sender: UIButton) {
    performSegueWithIdentifier(SendSegue, sender: self)  
}

首次显示SendViewController时导致延迟:

@IBAction func buttonTapped(sender: UIButton) {
    dispatch_async(dispatch_get_main_queue()) {
        let vc = self.storyboard!.instantiateViewControllerWithIdentifier(self.SendViewControllerID) as! SendViewController
        self.navigationController!.pushViewController(vc, animated: true)
    }   
}

阅读 278

收藏
2020-07-07

共1个答案

小编典典

问题被隔离到目标视图控制器中存在UITextField,也就是说,删除UITextField可以消除滞后。

然后,将其进一步隔离为存在自定义字体。

换句话说,在UITextField上使用系统字体而不是自定义字体可以消除延迟。没有解释为什么,但是有效。

2020-07-07