后退按钮在 UISplitViewController 上闪烁 -> 细节 segue

Back button blinks on UISplitViewController -> detail segue

我有一个 iPhone 应用程序,我正在努力使其通用。

我添加了一个拆分视图控制器,它的主视图控制器和详细视图控制器 VC 都嵌入在导航控制器中,因此当它们同时可见时,导航栏将显示在两者上,我可以添加 displayModeButtonItem() 和所有。

问题在于,在 iPhone 上,当一次只有一个 VC 可见时,嵌入细节 VC 的额外导航控制器将导致后退按钮在显示详细信息 segue 上闪烁。

差异很微妙,但它确实让我很烦恼。

这是没有额外导航控制器的情况:

下面是使用额外导航控制器的方式:

在 gif 中,它看起来不像实际的那么糟糕 iPhone,但您可以看到其中的区别。就像使用额外的导航控制器一样,后退箭头会自行显示,然后 "Reading" 标签会出现。如果没有额外的导航控制器,另一方面,后退箭头和"Reading"标签同时出现(注意,你会看到的,哈哈)。

为了解决这个问题,我尝试更改 segue,以便在主 VC 中点击 table 视图行时,我会直接进入实际细节 VC,绕过它的导航控制器。起初这似乎有效,但它导致了其他问题。例如,如果我在 iPad 上并将其他 VC 推到细节 VC 的顶部,然后在主 VC 上点击另一行,细节 VC 不会弹回到它的根 VC,即使我在 didSelectRowAtIndexPath.

中明确告诉它

我是不是做错了什么,或者这只是一个 UISplitViewController 怪癖?有谁知道如何修复或解决它?

谢谢!

好的,我明白了。

当问题发生时,我在 VC 的 viewDidLoad 中详细说明了这一点:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
    self.navigationItem.leftItemsSupplementBackButton = true
}

而且我注意到问题是由设置 leftBarButtonItem 引起的。所以我把它改成了这个,现在效果很好:

override func viewDidLoad() {
    super.viewDidLoad()
    if self.splitViewController?.collapsed == false {
        self.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
        self.navigationItem.leftItemsSupplementBackButton = true
    }
}