macos - 如何使用旧代码库中的 Big-Sur 样式工具栏 + 拆分视图?
问题描述
根据这个 WWDC 2020 演讲,Big Sur 的工具栏会自动分区以匹配并遵循NSSplitView
下面的窗格。
不幸的是,这需要我们使用10.10 Yosemite 中引入NSViewController
的 api 的后期版本NSSplitView
(请参阅此处相应的WWDC 2014 会议 PDF。)
从一个非常古老的代码库中使用它的最简单方法是什么NSViewController
NSSplitView
?
众所周知,新样式NSSplitView
在 XIB 中不可用,仅在故事板中可用,如StackOverflow 帖子中所述。
解决方案
我发现你可以在NSSplitView
里面把旧式的换成新式的awakeFromNib
。示例代码如下。
我假设window
and oldSplitView
areIBOutlet
对应于 XIB 中的对象,以及两个虚拟NSViewController
sleftVC
和rightVC
在 XIB 中创建,它们的view
s 连接到左窗格和右窗格。那么你所要做的就是:
// 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;
推荐阅读
- c# - 租户会话在 IRealTimeNotifier 中丢失
- joomla - Joomla 菜单上没有显示一些常见的 Fontawesome 图标
- python - 试图编写一个支持向量机,我得到了这个错误
- google-photos - 我想从 Google Photos API 获取确切类别的信息,例如 PEOPLE 类别中的每个人
- php - 在 Laravel 5.6 中传递的 Vue 道具
- scrapy - 在 Scrapy Pipeline 中,return super().process_item 是什么意思?
- php - 尝试在 php 中制作购物车,表单未正确定义索引
- c# - Apple iCloud 访问 uwp 应用程序中的联系人
- model - 使用 phalcon,我有两个数据库,如何使用 modelsManager 在 $builder 之前选择一个数据库?
- php - 如何在php中将表单提交到电子邮件