从情节提要板创建时,NSSplitViewController不会折叠

时间:2019-01-25 12:58:32

标签: cocoa appkit nssplitview nssplitviewcontroller

我试图模仿诸如Notes和Contacts之类的应用程序的行为,当我调整窗口大小时,左拆分视图项会折叠。使用情节提要板时,我无法重新创建此行为。

如果我用代码创建NSSplitViewController,则可以正常工作,但是,如果我通过情节提要进行操作,将无法正常工作。

我创建了一个剥离的项目,唯一的区别是NSSplitViewController的实例化方式:

https://github.com/peteog/NSSplitViewControllerIssue

请参见MainWindowController第11和12行,如果切换注释然后运行示例应用程序,则会发现行为有所不同:

import Cocoa

class MainWindowController: NSWindowController {
    override var windowNibName: NSNib.Name? {
        return "MainWindowController"
    }

    override func windowDidLoad() {
        super.windowDidLoad()

//        let splitViewController = NSSplitViewController()
        let splitViewController = NSStoryboard(name: "Storyboard", bundle: nil).instantiateInitialController() as! NSSplitViewController

        let sidebarSplitViewItem = NSSplitViewItem(sidebarWithViewController: SidebarViewController())
        splitViewController.addSplitViewItem(sidebarSplitViewItem)

        let contentSplitViewItem = NSSplitViewItem(viewController: ContentViewController())
        splitViewController.addSplitViewItem(contentSplitViewItem)

        contentViewController = splitViewController
    }    
}

当它来自情节提要来使折叠行为起作用时,我无法确定这是错误还是NSSplitViewController上缺少属性。

代码:

Code

故事板:

Storyboard

2 个答案:

答案 0 :(得分:0)

您的项目中没有定义拆分视图项目。在代码中执行此操作时,您通过将拆分视图行为设置为边栏来定义保留优先级。如果您不从界面构建器中删除拆分视图本身,则也可以在界面构建器中执行此操作。 但是,折叠边栏必须在代码中完成。 看看联系人应用程序,我相信他们正在跟踪窗口大小,并在达到硬编码大小时折叠边栏。

答案 1 :(得分:0)

(回答我自己的问题)

我从Apple收到了有关为此提交的Radar的反馈。我可以确认问题已从macOS Catalina beta 5开始修复。