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
Objective c 将子视图添加到NSWindow标题栏_Objective C_Cocoa_Osx Yosemite_Appkit_Nstitlebaraccessoryviewcontroller - Fatal编程技术网

Objective c 将子视图添加到NSWindow标题栏

Objective c 将子视图添加到NSWindow标题栏,objective-c,cocoa,osx-yosemite,appkit,nstitlebaraccessoryviewcontroller,Objective C,Cocoa,Osx Yosemite,Appkit,Nstitlebaraccessoryviewcontroller,我想创建一个自定义窗口工具栏,但不使用实际的NSToolbar(因为在某些情况下,它的行为不符合我的需要,并且我无法按照我想要的方式设置它的样式),因此我需要向窗口标题栏添加一个子视图。 它应该如下所示: 一个可行的方法是: [[[_window contentView] superview] addSubview:_titlebarView]; 但这有一个问题,它会在Yosemite上引起警告(NSWindow警告:添加未知子视图:),因此这似乎不是正确的方法 目前,我正在将工具栏视图添加到

我想创建一个自定义窗口工具栏,但不使用实际的NSToolbar(因为在某些情况下,它的行为不符合我的需要,并且我无法按照我想要的方式设置它的样式),因此我需要向窗口标题栏添加一个子视图。 它应该如下所示:

一个可行的方法是:

[[[_window contentView] superview] addSubview:_titlebarView];
但这有一个问题,它会在Yosemite上引起警告(
NSWindow警告:添加未知子视图:
),因此这似乎不是正确的方法

目前,我正在将工具栏视图添加到标题栏视图中:

[[[_window standardWindowButton:NSWindowCloseButton]
    superview] addSubview:_titlebarView];
但这感觉也不对

由于我的应用程序只针对OS X 10.10(约塞米蒂),所以我可以只使用约塞米蒂API,因此我查看了
NSTitlebarAccessoryViewController
,并成功地将其子类化,并将其与
NSWindow
addTitlebarAccessoryViewController:
方法一起使用。使用此方法仍存在一个问题,
layouttribute
的可能值为:

  • nslayouttributebottom

    将视图添加到窗口标题栏的底部,同时保留视图的高度
  • nslayouttributelight

    将视图添加到窗口标题栏的右侧,将视图剪裁到 标题栏
nslayouttributebottom
不适合我,因为我需要正确定位 在窗口标题栏的顶部(参见上面的屏幕截图),并将交通灯置于中心。
nslayouttributelight
正是我需要的,但我找不到增加标题栏高度的方法,因此视图被剪裁到标题栏高度,这对我来说毫无用处。(注意:使用纹理窗口并更改内容边框不起作用,因为它不会更改实际标题栏高度)


推荐的方法是什么?如果有可能拥有比默认标题栏更大的视图,我更愿意使用官方API并使用AccessoryViewController方法。

可能会实现您想要的。它的构建是为了避免Yosemite中的子视图警告,指定自定义窗口标题栏高度并将子视图添加到标题栏。

它只是一个NSToolBar。在约塞米蒂,当
window.title.titleviability=.Hidden
时,NSToolBar将成为标题栏

将您的窗口指定给自视图。 然后添加带有框架的子视图 稍后提供所需功能

谢谢@ePirat


将子视图添加到其标题栏视图中与

[[[_window standardWindowButton:NSWindowCloseButton] superview] addSubview:_customTitlebarView];

啊!这也困扰着我…仅供参考,您仍然可以使用您当前使用的方法。。。但它只会产生一个警告。@SevenBits我知道我可以使用它,但发行说明中有一条明确的说明:“这样做的应用程序需要解决这个问题,因为它会阻止10.10上的新功能正常工作。”在上,当使用新的标题栏附件视图时,我看到了另一个问题:核心图形行为发生了某种变化,这给我使用的第三方代码带来了麻烦(EDSidebar警告,以及使用空上下文呈现调用CorePlot等)。我可以可靠地重现这一点。当我添加附件视图时发生,当我删除它时消失。@MikeLischke例如什么警告?你是如何添加它的?(哪个布局属性?)如果显示图纸,则使用El Capitan交通灯重置其位置。在全屏模式下会出现更多问题。啊,这现在已经很难实现了。为什么苹果不提供清晰的API呢?WAYAppStoreWindow或INAppStoreWindow的问题在于,它提供了所有应该属于苹果的代码。我的“INAppStoreWindow”有一个很好的副作用,每次运行后我的窗口大小都会不断增加……正如我在问题中提到的,出于样式设置的原因,我不想使用NSToolBar,除非有一种方法可以将其像视图一样使用,并且能够在interface builder中完全设计它(并使用autolayout)。我认为这是不可能的。这实际上不是一个很有建设性的回答,因为它根本无助于回答我的问题。它确实可以工作,但感觉有点黑客味,而且苹果可能不喜欢在应用商店应用程序中使用它。(通过这种方式,在全屏模式下还存在一些问题)