Как включить видимость NSSplitView панель + панель сплиттер делитель?
У нас есть родительское представление Split
(NSSplitView
) и два подвида, Content
и SideBar
(боковая панель справа).
Каков был бы оптимальный удобный для какао способ переключения вида SideBar
?
- мне бы очень понравилось, если бы предлагаемое решение включало анимацию
- мне действительно не нужны никакие предложения, связанные с внешними плагинами и т. д. (Например, BWToolkit)
Подсказка: я пытался сделать это, но все равно у меня были проблемы со скрытием разделителя И NSSplitView тоже. Как я мог это сделать, в то же время скрывая это?
4 ответа:
Вот довольно приличный учебник, который показывает, как это сделать: разгадывание тайн NSSplitView.
Скрытие разделителя выполняется в делегатном методе NSSplitView splitView:shouldHideDividerAtIndex:.
Вам придется анимировать изменение размера кадра самостоятельно, если вам не нравится, как это делает NSSplitView.
Я написал быструю версию контента по ссылке из ответа @Nathan, которая работает для меня. В контексте моего примера
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
- это тот, который вы хотите свернуть.
В Xcode 9.0 с раскадровками откройте сцену приложения выберите вид - > меню - >Показать боковую панель. CTRL-click показать боковую панель, в отправленных действиях удалить предоставленную, нажмите на x. из круга CTRL перетащите в первый ответчик в сцене приложения и выберите toggleSideBar для подключения. Откройте раскадровку и выберите первый разделенный элемент представления, а в инспекторе атрибутов Измените поведение по умолчанию на боковую панель. Запустите и попробуйте с помощью пункта меню Вид Показать/Скрыть. Все сделано в interface builder без кода. toggleSideBar обрабатывает первый разделенный элемент представления. https://github.com/Dis3buted/SplitViewController
Я получил некоторые артефакты с кодом выше, вероятно, потому, что он был вне контекста. Я уверен, что он работает там, где должен был. В любом случае, вот очень упрощенная реализация:
// 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 } }
Чтобы увидеть хороший пример использования анимации, щелкните правой кнопкой мыши, чтобы загрузить этот файл.