向视图优胜美地添加按钮时出错。 "NSWindow warning: adding an unknown subview: "



我的代码部分是:

 NSWindow *appWindow = [NSApp appWindow];
    NSView *superview = [[appWindow standardWindowButton:NSWindowCloseButton] superview];
    NSRect frame;
    frame.size = NSMakeSize([self.mBuyFullVersionView frame].size.width,[self.mBuyFullVersionView frame].size.height);
    frame.origin.y =[superview frame].size.height - [self.mBuyFullVersionView frame].size.height -kVerticalSpacing;
    frame.origin.x =[superview frame].size.width - [self.mBuyFullVersionView frame].size.width - kHorizontalSpacing - 6;
    [self.mBuyFullVersionView setFrame:frame];
    [superview addSubview: self.mBuyFullVersionView];

"NSWindow 警告:添加一个未知的子视图:...",正如它所说,是NSWindow的警告。当子视图直接添加到窗口背景视图(称为边框视图)而不是其内容视图时,会出现警告。此警告是无害的,但不建议将视图添加到 backgroundView,因为这可能会在将来中断。

如果要将视图添加到标题栏,可以使用工具栏或 NSTitlebarAccessoryViewController。对于其他所有内容,请使用窗口的内容视图。

来自 Apples API 发行说明:

NSWindow 从不支持客户端向内容视图以外的任何内容添加子视图。某些应用程序会将子视图添加到 contentView.superview(也称为窗口的边框视图)。NSWindow 现在将在检测到此方案时记录:"NSWindow 警告:添加未知子视图:"。执行此操作的应用程序需要解决此问题,因为它会阻止 10.10 上的新功能正常工作。有关官方 API,请参阅 titlebarAccessoryViewController。

NSWindow 现在可以将官方已知的子视图添加到标题栏/工具栏区域。这些视图将使用一个名为NSTitlebarAccessoryViewController的新NSViewController子类包装,并使用"titlebarAccessoryViewControllers"API添加到窗口中。有一组方法可以添加和插入 titlebarAccessoryViewControllers,例如 addTitlebarAccessoryViewController: 和 removeTitlebarAccessoryViewControllerAtIndex:。但是,也可以利用"removeFromParentViewController"轻松删除给定的子视图控制器。NSTitlebarAccessoryViewController 有一个属性来告诉 NSWindow 在哪里放置视图 (layoutAttribute),还有一个属性来确定它在全屏中的行为方式 (fullScreenMinHeight)。NSToolbar fullScreenAccessoryView API 现已弃用,客户端应使用此新 API。

最新更新