8

我们有一个父Split视图 ( NSSplitView) 和两个子视图ContentSideBar(侧边栏在右侧)。

SideBar切换视图的最佳 Cocoa 友好方式是什么?

  • 如果建议的解决方案包括动画,我真的很喜欢
  • 我真的不需要任何与外部插件等相关的建议(例如 BWToolkit)

提示:我一直在尝试这样做,但我仍然在隐藏 NSSplitView 的分隔符时遇到问题。我怎么能做到这一点,同时隐藏它?

4

6 回答 6

7

这是一个相当不错的教程,展示了如何做到这一点:Unraveling the Mysteries of NSSplitView

隐藏分隔线是在 NSSplitView 的委托方法splitView:shouldHideDividerAtIndex:中完成的。

如果您不喜欢 NSSplitView 的方式,您将不得不自己更改帧大小的动画。

于 2012-03-23T18:22:17.077 回答
5

最简单的方法如下 - 它是动画的:[ SWIFT 5 ]

    splitViewItems[1].animator().isCollapsed = true // Show side pane
    splitViewItems[1].animator().isCollapsed = false // hide side pane
于 2019-07-19T05:52:55.690 回答
4

我在@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是您要折叠的那个。

于 2015-01-21T20:53:25.850 回答
4

在带有 Storyboards 的 Xcode 9.0 中,打开 Application Scene 选择 V​​iew->Menu->Show sidebar。CTRL-单击显示侧边栏,在发送的操作中删除提供的操作,单击 x。从圆圈 CTRL 拖动到应用程序场景中的 First Responder 并选择 toggleSideBar 进行连接。打开故事板并选择第一个拆分视图项目,然后在属性检查器中将行为从默认更改为侧边栏。运行并尝试查看菜单项显示/隐藏。全部在界面生成器中完成,无需代码。toggleSideBar 处理第一个拆分视图项。https://github.com/Dis3buted/SplitViewController

于 2017-09-29T14:41:15.460 回答
3

我用上面的代码得到了一些工件,可能是因为它脱离了上下文。我相信它可以在它应该做的地方工作。无论如何,这是一个非常简化的实现:

// 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
    }
}

要查看使用动画的好示例,请按住 control 单击下载此文件

于 2016-05-06T03:57:10.910 回答
1

如果您的NSSplitView控件是NSSplitViewController对象的一部分,那么您可以简单地使用它:

splitViewController.toggleSidebar(nil)
于 2021-01-15T14:33:36.487 回答