从 Modal/Popover 展开 Segue 导致开始/结束外观转换的调用不平衡

Posted

技术标签:

【中文标题】从 Modal/Popover 展开 Segue 导致开始/结束外观转换的调用不平衡【英文标题】:Unwind Segue from Modal/Popover resulting in Unbalanced calls to begin/end appearance transitions 【发布时间】:2015-11-09 14:34:18 【问题描述】:

我有以下设置:

Nav Controller -> VC1 -Push--> VC2 -PopOver or Modal Segue--> VC3.

VC3 正在展开回到 VC1。

当从 VC2 到 VC3 的 Segue 是 PopOver 和 Modal 时,展开以警告结束:Unbalanced calls to begin/end appearance transitions for UIViewController"

如果从 VC 到 VC 的 Segue 是 push,则警告消失。

知道如何摆脱警告或为什么它甚至显示?

【问题讨论】:

现在仍在发生... 还是这个bug ... 【参考方案1】:

这是一个错误。忽略它(或者,如果您想成为一个好公民,请向 Apple 提交错误报告)。

【讨论】:

【参考方案2】:

我能够重现您的问题并找到解决方案!

如果展开逻辑能够解决这个问题,那就太好了。也许这是一个错误,也许不是。无论哪种方式,解决方案都是让 VC2(具有弹出窗口的控制器)成为倒带的目标,然后等待它完成出现,然后再弹出导航控制器。这样可以确保倒带(反向弹出)动画有足够的时间完成,然后再向后移动。即使关闭动画,它仍然需要等待,否则您会收到错误消息。

您的 VC2 代码应如下所示。 (斯威夫特)

class VC2: UIViewController 
    private var unwind = false
    @IBAction func unwindToVC1(segue:UIStoryboardSegue) 
        unwind = true
    

    override func viewWillAppear(animated: Bool) 
        super.viewWillAppear(animated)

        if unwind 
            self.navigationController?.popViewControllerAnimated(false)
        
    

【讨论】:

以上是关于从 Modal/Popover 展开 Segue 导致开始/结束外观转换的调用不平衡的主要内容,如果未能解决你的问题,请参考以下文章

performSegueWithIdentifier 未从展开 segue 触发

无法从展开的 segue 动作中弹出

使用后退按钮展开 segue 时执行代码

自定义展开 Segue

在展开的 segue 中弹出到根视图

以编程方式展开 segue