NSToolbar 在 Leopard 和 Snow Leopard 中看起来不同

Posted

技术标签:

【中文标题】NSToolbar 在 Leopard 和 Snow Leopard 中看起来不同【英文标题】:NSToolbar looks different in Leopard and Snow Leopard 【发布时间】:2011-07-09 13:50:09 【问题描述】:

我正在开发一个 Cocoa 应用程序,但我在主窗口中使用的 NSToolbar 的外观有所不同。

具体来说,我使用搜索字段作为最后一个 NSToolbarItem 并且在 Snow Leopard 下它可以正确显示:

它在 Leopard 下被切割:

查看这两个版本,Leopard 似乎不尊重我在项目之间放置的空格。我还看到,有时在 Interface Builder 的工具栏上进行一些更新后,即使在 Snow 下,这些更改也不会反映在正在运行的应用程序中。我必须从自定义菜单中拖动默认栏才能看到它们。

更新 正如 NSGod 建议的那样,NSToolbar 并不总是反映 .nib 文件中的内容的原因在于为我启用的自动保存机制。

造成这种不当行为的原因可能是什么? 是否有一些我应该考虑的约束(最小和最大)尺寸? 随时向我指出一些文档

更新 2 有没有办法以编程方式将项目和空间引入 NSToolbar 或检查使用 Interface Builder 输入的项目和空间的一致性(在运行时)?

【问题讨论】:

我有一个关于这个帖子的工作***.com/questions/3481858/…...你能联系我吗? 在我看来,您最好使用传统的 NSToolbar 委托方法管理复杂的工具栏,而不是在 Interface Builder 中构建工具栏。你对代理有更多的控制权。 【参考方案1】:

虽然我记得在 NSToolbars 的搜索字段中有一些奇怪的地方,但我从未见过右侧被截断的行为。

作为空间的NSToolbarItems 是固定的一单元空间还是灵活空间?

“我有时也看到了,在我 在工具栏上进行一些更新 Interface Builder,这些变化是 没有反映在运行中 即使在雪下的应用程序。我必须 将默认栏从 自定义菜单以查看它们。”

您需要记住,如果您在工具栏中启用了用户自定义和自动保存行为,那么当用户明确进行更改时,它将被保存为用户默认值。如果您随后在 IB 中重新排列工具栏并运行应用程序,则保存在用户默认值中的配置可能会覆盖您在 nib 文件中指定的默认配置。

我通常做的是在测试期间,删除我的应用程序的 prefs 文件,这样更改就不会被覆盖。 (FWIW,我通常使用保存在 Dock 中的应用程序的 AppleScript。它只运行 do shell script 命令删除 prefs 文件。作为面向 GUI 的人,我更容易单击它让它在调试之前运行。这个版本的脚本要求删除 prefs 文件,尽管它也可以自定义:http://www.markdouma.com/developer/DeleteAppPrefs.zip。如果你以前从未运行过它,你会得到选择文件对话框,然后选择的文件在实际 AppleScript 中保存为别名,因此不会再次询问您。您可以将图标拖到 AppleScript 编辑器上查看脚本或更改它)。

无论如何,如果我要发布使用新工具栏布局的应用程序的新版本,并希望防止配置被覆盖,我会将工具栏的标识符(或自动保存名称)更改为类似“docToolbar2.0”。

【讨论】:

您对自动保存覆盖默认工具栏布局是正确的。我使用的空格现在都是固定的(搜索字段和分段控件之间没有空格),但以前有人很灵活。从 Leopard 下的屏幕截图来看,分段控件和搜索字段之间似乎有一个灵活的空间,搜索字段被剪切,好像没有空间一样。最小尺寸重要吗?

以上是关于NSToolbar 在 Leopard 和 Snow Leopard 中看起来不同的主要内容,如果未能解决你的问题,请参考以下文章

自定义 NSToolbar 中项目之间的空间

如何在 Xcode 6 OSX Storyboard 中为 NSToolbar 项目设置 IBOutlet

如何在NSToolbar中启用toolbaritems?

如何将动作从 NSToolbar 项发送到 TabViews 的第一响应者

如何将 Leopard 和 Snow Leopard 支持添加到 Lion Cocoa 应用程序?

在Os X Leopard中显示隐藏的文件夹和文件