Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 我可以在工具栏中居中放置NSToolbarItem吗?_Cocoa_Macos - Fatal编程技术网

Cocoa 我可以在工具栏中居中放置NSToolbarItem吗?

Cocoa 我可以在工具栏中居中放置NSToolbarItem吗?,cocoa,macos,Cocoa,Macos,就是这样。我想把两个按钮放在中间。 我的工具栏看起来像这样([B]是一个按钮): [B] [乙][乙] [搜索栏] 但是搜索栏比最左边的按钮大,所以中间的按钮没有居中。我试着添加一个具有自定义宽度的视图,但这被本地化搞砸了。 有没有办法将它们居中?将事物居中,或者确实控制按钮顺序以外的布局,虽然可以使用工具栏,但这不一定是个好主意 编辑:我注意到Mail.app确实使用巫毒来做一些事情,就像你建议的那样 它们通过跟踪工具栏项目并调整工具栏中第一个灵活空间的大小来对齐工具栏来实现此目的 这可能适用

就是这样。我想把两个按钮放在中间。 我的工具栏看起来像这样([B]是一个按钮):

[B] [乙][乙] [搜索栏]

但是搜索栏比最左边的按钮大,所以中间的按钮没有居中。我试着添加一个具有自定义宽度的视图,但这被本地化搞砸了。
有没有办法将它们居中?

将事物居中,或者确实控制按钮顺序以外的布局,虽然可以使用工具栏,但这不一定是个好主意

编辑:我注意到Mail.app确实使用巫毒来做一些事情,就像你建议的那样

它们通过跟踪工具栏项目并调整工具栏中第一个灵活空间的大小来对齐工具栏来实现此目的


这可能适用于某些用例,但可能很脆弱;小心使用,请记住,如果用户可以自定义工具栏,他们可能会删除灵活的空间,从而破坏您的居中状态。

这是一个姗姗来迟的响应,但由于我也需要这样做,所以我刚刚编写了一个子类,它将创建一个空间来居中下一个工具栏项:


< P>而不是这种复杂的方法,我会让它集中在每边上添加额外的空白项,直到这两个按钮在窗口的中间。工具栏应继续适当调整大小

如果您的部署目标是macOS 10.14(Mojave)或更高版本,则可以通过将工具栏的设置为要居中的项目的标识符来居中工具栏项目


当您将窗口的
titleviability
设置为
NSWindowTitleHidden
时,此选项用于将包含窗口标题的工具栏项居中。它在其他情况下可能无法正常工作。

但Mail.app可以做到这一点。他们将按钮与源列表对齐@大卫:Mail.app使用的是只能被描述为巫毒的东西。虽然这个问题已经过时,但它将复制与Mail.app Hi@Cory相同的行为,这个JWToolbarAdaptiveSpaceItem仍然没有苹果的巫毒一样奇特。Apple one的有趣功能是,在“自定义工具栏”模式下,当添加新的邻居时,工具栏项将被设置动画。
NSToolbarFlexibleSpaceItem
具有此行为,但它不考虑其他视图的位置,例如拆分视图的子视图。没有public
NSToolbarFlexibleSpaceItem
,因此似乎不可能对其进行子类化。我稍后会研究这个问题。也许需要一些核心动画?谢谢你的宝贵意见!正是我需要的!不幸的是,除了Xcode默认的“保留所有权利”之外,我在您的代码中找不到许可证。猜测你打算让人们能够使用它,你能考虑提交一个BSD风格的许可文件给回购协议以使它正式吗?是的,我需要添加它。我会添加一个麻省理工许可证,这样你可以假设你可以随意使用它……你能添加许可证吗?这也解决了我的问题,但是没有许可证我不能使用。谢谢虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则“仅链接”答案可能会无效。这不会使项目在窗口中居中,而只会使其在两侧的项目之间居中。如果一方或另一方有更多的物品,它将停止慢跑。