我們有一個家長Split
查看(NSSplitView
)和兩個子視圖Content
和SideBar
(側邊欄位於右側)。如何切換NSSplitView子視圖的可見性+隱藏窗格分割器分隔線?
什麼是最佳的可可友好的方式來切換SideBar
視圖?
- 我真的很喜歡它,如果建議的解決方案包括動畫
- 我真的不需要與外部插件任何建議,等(如BWToolkit)
提示:我我一直在試圖做到這一點,但我仍然遇到了隱藏NSSplitView分隔線的問題。我怎麼能這樣做,同時又隱藏它?
我們有一個家長Split
查看(NSSplitView
)和兩個子視圖Content
和SideBar
(側邊欄位於右側)。如何切換NSSplitView子視圖的可見性+隱藏窗格分割器分隔線?
什麼是最佳的可可友好的方式來切換SideBar
視圖?
提示:我我一直在試圖做到這一點,但我仍然遇到了隱藏NSSplitView分隔線的問題。我怎麼能這樣做,同時又隱藏它?
下面是一個相當不錯的教程,展示瞭如何做到這一點:Unraveling the Mysteries of NSSplitView。
隱藏分隔線在NSSplitView的代表方法splitView:shouldHideDividerAtIndex:中完成。
如果你不喜歡NSSplitView的方式,你將不得不自己動畫改變幀大小。
我在@ Nathan的答案中爲我寫了一個Swift版本的鏈接內容。在我的例子的情況下splitView
被設置在其他地方,可能是因爲在一個無所不包類實例屬性:
func toggleSidebar() {
if splitView.isSubviewCollapsed(splitView.subviews[1] as NSView) {
openSidebar()
} else {
closeSidebar()
}
}
func closeSidebar() {
let mainView = splitView.subviews[0] as NSView
let sidepanel = splitView.subviews[1] as NSView
sidepanel.hidden = true
let viewFrame = splitView.frame
mainView.frame.size = NSMakeSize(viewFrame.size.width, viewFrame.size.height)
splitView.display()
}
func openSidebar() {
let sidepanel = splitView.subviews[1] as NSView
sidepanel.hidden = false
let viewFrame = splitView.frame
sidepanel.frame.size = NSMakeSize(viewFrame.size.width, 200)
splitView.display()
}
這些功能可能會在一個類中的方法,他們是我的。如果你的splitView
可以是nil
你顯然必須檢查。這也假設你有兩個子視圖,索引1處的子視圖,這裏是sidePanel
是你想摺疊的那個。
我用上面的代碼得到了一些工件,可能是因爲它與上下文無關。我相信它的工作原理在哪裏。總之,這裏是一個非常精簡的實現:
// this is the declaration of a left vertical subview of
// 'splitViewController', which is the name of the split view's outlet
var leftView: NSView {
return self.splitViewController.subviews[0] as NSView
}
// here is the action of a button that toggles the left vertical subview
// the left subview is always restored to 100 pixels here
@IBAction func someButton(sender: AnyObject) {
if splitViewController.isSubviewCollapsed(leftView) {
splitViewController.setPosition(100, ofDividerAtIndex: 0)
leftView.hidden = false
} else {
splitViewController.setPosition(0, ofDividerAtIndex: 0)
leftView.hidden = true
}
}
要使用動畫看到一個很好的例子,控制點擊下載this file。
在帶故事板的Xcode 9.0中打開應用場景選擇View-> Menu-> Show sidebar。按CTRL並單擊顯示側欄,在發送的操作中刪除提供的操作,單擊x。從圓圈CTRL拖動到應用程序場景中的First Responder,然後選擇toggleSideBar以連接到。打開故事板並選擇第一個拆分視圖項目,並在屬性檢查器中將行爲從默認變爲側欄。運行並嘗試查看菜單項顯示/隱藏。所有在界面生成器中完成的無代碼。 toggleSideBar處理第一個分割視圖項目。 https://github.com/Dis3buted/SplitViewController
很好的例子,謝謝! – 2017-10-31 18:24:19
謝謝,彌敦!這似乎是有道理的... – 2012-03-23 18:31:23