objective-c - NSToolbar 在 Leopard 和 Snow Leopard 中看起来不同

标签 objective-c cocoa osx-snow-leopard osx-leopard nstoolbar

我正在开发一个 Cocoa 应用程序,并且 NSToolbar 的外观得到了不同的结果。 我用于主窗口。

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

它是在 Leopard 下剪切的: enter image description here

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

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

造成这种不当行为的原因是什么? 我应该考虑一些关于约束(最小和最大)尺寸的事情吗? 请随意向我提供一些文档

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

最佳答案

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

作为空间的NSToolbarItem是固定单位空间还是灵活空间?

"I also saw that sometimes, after I make some update at the toolbar in Interface Builder, these changes are not mirrored in the running application even under Snow. I have to drag the default bar from the customizing menu in order to see them."

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

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

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

关于objective-c - NSToolbar 在 Leopard 和 Snow Leopard 中看起来不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206863/

相关文章:

objective-c - cacheDisplayInRect 在内部是如何工作的?

php - 在 Mac OS X 10.6 上安装 PECL

objective-c - 如何从文件路径获取文档 UTI?

iphone - 将整个项目的自定义 View 显示为页脚

objective-c - 为什么我觉得 Interface Builder 挡住了我的路?

macos - 如何找到一个对象( Controller 或 View )辞职的第一个响应者?

objective-c - 框架和 XIB

objective-c - initWithCoder 中的值(int、struct-values)在此方法之外丢失

haskell - 在 i386 macbook(雪豹)上使用 cabal readline 包

objective-c - 应用程序不拥有操作类型