2017-03-12 85 views
1

在我的應用程序中,我在標籤欄控制器中有一個分離視圖控制器,而主視圖控制器嵌入在導航控制器內。最初,詳細視圖控制器只是一個空白的視圖控制器。現在,從1列分離爲2時,處於主位置的視圖控制器奇怪地不再延伸到頂部和底部條之下。酒吧是半透明的,所以你應該能夠看到導航欄和標籤欄中的紅色。我已經將問題縮小到splitViewController(_:separateSecondaryFrom:),我用它將詳細信息嵌入到導航控制器中。我不明白爲什麼這會導致主要的這種行爲。這個方法的實現有什麼不正確? enter image description here主視圖控制器不在分割視圖控制器中的頂部/底部酒吧下延伸

一旦擴大到兩列紅色不再出現在酒吧: enter image description here

func splitViewController(_ splitViewController: UISplitViewController, separateSecondaryFrom primaryViewController: UIViewController) -> UIViewController? { 
    //in the case where it's separating into two, we want to embed the detail in a navigation controller 
    let primaryNavController = primaryViewController as! UINavigationController 

    let detailController: UIViewController 
    if primaryNavController.viewControllers.count > 1 { 
     detailController = primaryNavController.viewControllers[1] 
    } else { 
     detailController = ViewController() 
    } 

    return UINavigationController(rootViewController: detailController) 
} 

I've uploaded a sample project here.

回答

0

紅色爲預計在倒塌的界面出現在酒吧在繪製酒吧下方的視圖的半透明和模糊時,可能會出現呃逆。可能是由於在框架中進行了一些繪圖和緩存優化,但是當我在導航欄上觸發酒吧隱藏並顯示事件時,它很好。

func splitViewController(_ splitViewController: UISplitViewController, separateSecondaryFrom primaryViewController: UIViewController) -> UIViewController? { 
    //in the case where it's separating into two, we want to embed the detail in a navigation controller 
    let primaryNavController = primaryViewController as! UINavigationController 

    let detailController: UIViewController 
    if primaryNavController.viewControllers.count > 1 { 
     detailController = primaryNavController.viewControllers[1] 
    } else { 
     detailController = ViewController() 
    } 
    //Fake trigger to force bars to draw blur translucency 
    let navigationNew = UINavigationController(rootViewController: detailController) 
    navigationNew.setNavigationBarHidden(true, animated: false) 
    navigationNew.setNavigationBarHidden(false, animated: false) 
    return navigationNew 
} 

讓我知道它是否適合你。

+0

奇怪...它的工作原理。也可以執行'setNeedsLayout()'和'layoutIfNeeded()'。嗯,時間來提交錯誤報告。 – Joey

+0

是的,任何可能觸發導航視圖層次結構重新繪製的事件都應該這樣做。 –

相關問題