我有这个应用程序使用一个NSSplitViewController作为根,并 NSTabViewController作为其detailViewController连接.
此应用程序将设置为1024x768启动.左侧窗格应以320x768启动,右侧窗格(tabViewController所在的位置)应在704x768处启动.
我运行这个应用程序10次,9次将以不正确的大小(约500x500)启动.其他奇怪的是这个应用程序不应该是可扩展的,但如果你将鼠标悬停在窗口边框附近,你会看到光标指示要缩放.
我希望它以正确的大小启动,并且没有可扩展的选项.
这两个设置都在界面构建器上,但被忽略.
您可以在此处下载演示此问题的示例项目.多次停止并运行项目以查看问题.
我该如何解决这个问题?
嗨我已经看过这个问题已经问了几次但是没有明确的答案,所以我为xcode 7和swift2创建了它(这可能会改变一些事情).
我使用Xcode 7和Cocoa OSX Story board + swift2创建了一个项目,所以我的项目开始于一个连接到NSViewController 的NSWindowController(正如预期的那样!).我在我的窗口控制器中添加了一个NSToolbar,并在工具栏中添加了一个NSButton.我将我的NSViewController更改为新的NSSplitViewController之一,它链接到三个NSViewController并水平显示它们的视图 - 使用垂直分隔符 - (类似于您在照片应用程序中看到的布局或Yosemite +中的页面).我的最终目标是"我的工具栏"中的按钮显示并隐藏第一个拆分.
这是我的理解,并且我希望实现这一点我应该在NSSplitViewController中创建一个动作,它或多或少地改变了它们在这里工作的方式约束:如何在mac中折叠和展开视图应用?.
然后以某种方式将此操作链接到工具栏中的NSButton ...它恰好位于NSWindowController中(远远超出层次结构中)...
我已经解决了有关NSToolbar和故事板的其他问题,但未能实现我的目标:
Apple确实(再次)在WWDC15中提到他们为osx和拥有视图控制器的拆分视图控制器创建了故事板,以便您可以将逻辑和工作移动到特定的视图控制器,因此我期望从在我的拆分视图控制器内部,因为这是需要更改的目标.
有谁知道如何从视图控制器本身实现这一点?我真的无法找到一种方法将ToolBarItem连接到它.
几乎所有的 macOS 官方应用都有这个工具栏的功能,NSToolbarItem灵活的空间限制了NSSplitViewItem查看。我首先想到 NSToolbar 上可能有 3 个不同的部分。但它只是一个工具栏。您可以打开 Notes 应用程序并自定义工具栏。
我想这就是 Apple 配置灵活空间项目的方式。
我发现了这个JWToolbarAdaptiveSpaceItem,但它是可移动的,不能像 Note 应用程序那样用灵活的空间项目替换。
还有另一个stackoverflow的问题(我现在找不到)问到这个问题,但答案是添加不是NSToolbar的假视图和按钮。
因此,有谁知道如何实现这一目标?
(对不起我的英语)
Finder 和 Notes 有一种我正在寻求重现的特殊行为。NSToolbar 中的“灵活空间”似乎考虑了拆分视图的尺寸。例如,第一组按钮在侧边栏的左侧与右侧对齐。第二组图标与第一列的右侧对齐。当我加宽侧边栏时,工具栏项目随之移动。
有没有可能重现这个?
使用@KenThomases 提供的解决方案,我实现了如下:
final class MainWindowController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
window?.toolbar?.delegate = self
// Make sure that tracking is enabled when the toolbar is completed
DispatchQueue.main.async {
self.trackSplitViewForFirstFlexibleToolbarItem()
}
}
}
extension MainWindowController: NSToolbarDelegate {
func toolbarWillAddItem(_ notification: Notification) {
// Make sure that tracking is evaluated only after the item was added
DispatchQueue.main.async {
self.trackSplitViewForFirstFlexibleToolbarItem()
}
}
func toolbarDidRemoveItem(_ notification: Notification) {
trackSplitViewForFirstFlexibleToolbarItem()
}
/// - Warning: This is a …Run Code Online (Sandbox Code Playgroud) cocoa nssplitview nstoolbar nstoolbaritem nssplitviewcontroller
XIB 是否支持 NSSplitViewController/NSSplitViewItem?我只看到 NSSplitView
我可以拖放 NSViewController 并将其子类化为 NSSplitViewController 吗?如何添加 NSSplitViewItem 它主要是开箱即用的?
我可以很容易地在故事板中看到对它们的支持。
Xcode 8.2.1,Swift 3.0.2,macOS 10.12
我有一个NSSplitViewController有3个窗格(请注意NS;这是一个Mac应用程序).
我正在尝试将最左侧的窗格设置为始终具有固定宽度,而不是可调整大小.我尝试过以下方法:
constrainMaxCoordinate并constrainMinCoordinate没有奏效.有没有其他人最近上班?有很多关于这个主题的文章,但他们的工具集已有几年的历史了,他们的建议都没有对我有用.谢谢!
我想使用自定义NSSplitView与我NSSplitViewController。
该文件说:
要提供自定义的拆分视图,请在继承的viewDidLoad()方法中调用super之前随时设置此属性。也就是说,在拆分视图控制器的isViewLoaded属性为true之前。
我的NSSplitViewController子类称为MainVC。
我尝试-viewDidLoad在调用之前设置我的自定义拆分视图[super viewDidLoad]:
- (void)viewDidLoad {
self.splitView = [MySplitView new];
[super viewDidLoad];
// Rest of viewDidLoad...
}
Run Code Online (Sandbox Code Playgroud)
但这没用。我收到以下错误:
2017-09-02 10:35:43.527312-0700 Zee [6497:632581] ** *-[MainVC setSplitView:],/ BuildRoot / Library / Caches / com.apple.xbs / Sources / AppKit / AppKit-中的声明失败1561 / Controllers / NSSplitViewController.m:220
2017-09-02 10:35:43.527558-0700 Zee [6497:632581] MainVC:-splitView只能在加载视图之前分配
我也尝试覆盖loadView:
- (void)loadView {
self.splitView = [MySplitView new];
[super loadView];
}
Run Code Online (Sandbox Code Playgroud)
但是我得到:
2017-09-02 10:39:39.377345-0700 …
我有NSSplitViewController这first viewcontroller显示一个表,并second viewcontroller应基于表行的选择viewcontrollers清单显示视图-控制.
我正在使用tableViewSelectionDidChange()获取所选行.
现在,我有一堆viewcontrollers的(故事板ID给出的行号),我应该添加和删除,以second viewcontroller在NSSplitViewController
我怎样才能做到这一点?