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

时间:2016-08-23 19:26:45

标签: ios uinavigationcontroller uisplitviewcontroller

我有一个iPhone应用程序,我试图让它普及。

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

问题是,在iPhone上,当一次只能看到其中一个VC时,细节VC嵌入的额外导航控制器将导致后退按钮在显示细节segue上闪烁。

差别很微妙,但这真的让我烦恼。

以下是没有额外导航控制器的方式: Without navigation controller

以下是额外导航控制器的关系: With navigation controller

在GIF中,它看起来并不像实际的iPhone那么糟糕,但你可以看到差异。就像使用额外的导航控制器一样,后退箭头会自动显示,然后“阅读”标签就会赶上。另一方面,如果没有额外的导航控制器,后退箭头和“阅读”标签会同时显示(注意,你会看到它,哈哈)。

为了解决这个问题,我尝试更改segue,这样当点击主VC中的表视图行时,我会直接转到VC的实际细节,绕过它的导航控制器。这似乎最初起作用,但它导致了其他问题。例如,如果我在iPad上并且我将其他VC推到了详细VC的顶部,然后在主VC上挖了另一行,那么细节VC就不会弹回到它的根VC,即使我明确告诉它在didSelectRowAtIndexPath

我在这里做错了什么,或者只是UISplitViewController怪癖?有谁知道如何解决或解决它?

谢谢!

1 个答案:

答案 0 :(得分:2)

好的,我明白了。

当问题发生时,我在详细信息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
    }
}