我一直在尝试在标准NSWindow上创建自定义标题栏的帮助下为NSWindow创建自定义标题栏。
NSView *themeFrame = [[window contentView] superview];
NSView *firstSubview = [[themeFrame subviews] objectAtIndex:0];
[titleBarView setAutoresizingMask:(NSViewMinYMargin | NSViewWidthSizable)];
[themeFrame addSubview:titleBarView positioned:NSWindowBelow relativeTo:firstSubview];
它适用于OSX 10.9,但在OSX 10.10中,Xcode发出警告:
NSWindow warning: adding an unknown subview:XXX
0 AppKit 0x00007fff88f80b3c -[NSThemeFrame addSubview:] + 107
1 AppKit 0x00007fff8896fb8f -[NSView addSubview:positioned:relativeTo:] + 208
该应用程序可以很好地运行并显示自定义的标题,并且此警告仅在Xcode控制台中显示。那么OSX 10.10会在此处进行一些更改吗?还有添加自定义标题栏的新方法吗?
是的,OS X Yosemite使用新的NSTitlebarAccessoryViewController API将自定义子视图添加到标题栏:
NSWindow从不支持客户端将子视图添加到除contentView之外的任何其他内容。某些应用程序会将子视图添加到contentView.superview(也称为窗口的边框视图)。现在,NSWindow将在检测到以下情况时记录日志:“ NSWindow警告:添加未知的子视图:”。这样做的应用程序将需要解决此问题,因为它会阻止10.10上的新功能正常运行。有关官方API,请参见titlebarAccessoryViewControllers。
NSWindow现在可以将正式已知的子视图添加到标题栏/工具栏区域。视图将使用名为NSTitlebarAccessoryViewController的新NSViewController子类包装,并使用“ titlebarAccessoryViewControllers” API添加到窗口中。有一组添加和插入titlebarAccessoryViewControllers的方法,例如addTitlebarAccessoryViewController:和removeTitlebarAccessoryViewControllerAtIndex:。但是,也可以利用“ removeFromParentViewController”轻松删除给定的子视图控制器。NSTitlebarAccessoryViewController具有一个属性来告知NSWindow视图放置位置(layoutAttribute),以及一个属性来确定其在全屏状态下的行为(fullScreenMinHeight)。现在不推荐使用NSToolbar fullScreenAccessoryView API,
https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKit/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句