valentin,爲了直接回答「爲什麼是這樣?」,我認爲答案很簡單,就是它在實現其API時的一個錯誤。
因爲你似乎已經發現,當在橫向方向時,它調用上面的時候,它似乎應該不是,然後調用splitViewController:willShowViewController:invalidatingBarButtonItem:。
此外,我發現,當縱向時,它發送一個非常早的消息(即在view.frame被調整之前)到splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
。
我看到最讓我惱火的一件事是,使用從他們的模板創建中提供的代碼,按鈕欄會出現,然後在啓動時消失。
我的解決方案是實施一個解決方法,我在[email protected]上發佈了:johnnkdoe/freeforall.git,類KludgeWorkaroundForBuggySplitViewDelegateStartup。
使這個當前的詳細視圖控制器類的父類,如
//@interface MyViewController : UIViewController<UISplitViewControllerDelegate>
@interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup
這將設置初始按鈕欄標題母版,如果你沒有你喜歡的東西。您可以通過在您的子類實現中重寫@property getter來覆蓋它。如果你想要做的不僅僅是這個kludgeWorkaround類的東西,你可以在做自己的工作之前自己覆蓋它們(複製和粘貼或者)在它們上面調用[super ...]。
我不能說這解決了我看來是一個執行錯誤的問題,但是解決方法是在橫向模式下啓動分屏控制器應用程序時擺脫了按鈕欄的簡短外觀。