根据this WWDC 2020 talk,
大苏尔(Big Sur)的工具栏会自动划分为与下面NSSplitView
的窗格匹配并遵循的窗格。
不幸的是,这要求我们使用在{10.10 Yosemite中引入的NSViewController
API的后NSSplitView
版(请参见此处的相应WWDC 2014 session PDF。)
在带有旧NSViewController
NSSplitView
的真正旧代码库中使用它的最简单方法是什么?
众所周知,新型NSSplitView
在XIB中不可用,而仅在情节提要中可用,如this StackOverflow post中所述。
答案 0 :(得分:0)
我发现您可以在NSSplitView
内将awakeFromNib
从旧样式交换为新样式。示例代码如下。
我假设window
和oldSplitView
是IBOutlet
到XIB中的相应对象,并且创建了两个虚拟NSViewController
s leftVC
和rightVC
XIB中view
连接到左窗格和右窗格的XIB中。然后,您要做的就是:
// enable scrolling behind the tool bar, if you haven't
window.styleMask|=NSWindowStyleMaskFullSizeContentView;
// create a new-style NSSplitView using NSSplitViewController
splitVC=[[NSSplitViewController alloc] init];
splitVC.splitView.vertical=YES;
splitVC.view.translatesAutoresizingMaskIntoConstraints=NO;
// prepare the left pane as a sidebar
NSSplitViewItem*a=[NSSplitViewItem sidebarWithViewController:leftVC];
[splitVC addSplitViewItem:a];
a.canCollapse=NO;
// prepare the right pane
NSSplitViewItem*b=[NSSplitViewItem splitViewItemWithViewController:rightVC];
[splitVC addSplitViewItem:b];
// swap the old NSSplitView with the new one
[window.contentView replaceSubview:oldSplitView with:splitVC.view ];
// set up the constraints so that the new `NSSplitView` to fill the window
[splitVC.view.topAnchor constraintEqualToAnchor:window.contentView.topAnchor
constant:0].active=YES;
[splitVC.view.bottomAnchor constraintEqualToAnchor:((NSLayoutGuide*)window.contentLayoutGuide).bottomAnchor].active=YES;
[splitVC.view.leftAnchor constraintEqualToAnchor:((NSLayoutGuide*)window.contentLayoutGuide).leftAnchor].active=YES;
[splitVC.view.rightAnchor constraintEqualToAnchor:((NSLayoutGuide*)window.contentLayoutGuide).rightAnchor].active=YES;