Cocoa 锁定NSF文档的纵横比';窗户

Cocoa 锁定NSF文档的纵横比';窗户,cocoa,nswindow,appkit,Cocoa,Nswindow,Appkit,我有一个基于文档的应用程序,我正在尝试锁定文档窗口的纵横比。文档的内容是一个自定义视图,我可以轻松设置纵横比。但是,当我调整窗口大小时,会有一个黑色背景填充视图和窗口之间的空间。我已经尝试过在documents类中重写窗口的aspectRatio,但是这似乎没有起到作用 - (NSSize)aspectRatio { return NSMakeSize(600,480); } 我还尝试在加载nib后设置windows纵横比。当我的应用程序不是基于文档时,这就成功了 [window se

我有一个基于文档的应用程序,我正在尝试锁定文档窗口的纵横比。文档的内容是一个自定义视图,我可以轻松设置纵横比。但是,当我调整窗口大小时,会有一个黑色背景填充视图和窗口之间的空间。我已经尝试过在documents类中重写窗口的aspectRatio,但是这似乎没有起到作用

- (NSSize)aspectRatio {
    return NSMakeSize(600,480);
}
我还尝试在加载nib后设置windows纵横比。当我的应用程序不是基于文档时,这就成功了

[window setAspectRatio:window.frame.size];
我还有一个踢球的。。。假设我可以锁定窗口的纵横比,我想在用户单击缩放按钮将应用程序置于全屏时覆盖它。然后,也只有到那时,我才想填充视图和窗口之间的空间

我已经研究了很长一段时间,只是找不到解决办法

有一个黑色背景填充视图和窗口之间的空间

你就不能把窗户背景换成不同的颜色吗

我已尝试在documents类中重写窗口的aspectRatio

NSDocument
的子类中?如果重写
-aspectRatio
有效,它应该在
NSWindow
的子类中。但是,您应该使用
-setAspectRatio:

我还尝试在加载nib后设置windows纵横比。当我的应用程序不是基于文档时,这就成功了

无论窗口属于基于文档的应用程序还是非基于文档的应用程序,此操作都有效

我想在用户单击缩放按钮将应用程序置于全屏时覆盖该选项

您可以有一个实现
–windowShouldZoom:toFrame:
,这是
NSWindowDelegate
协议的一部分的窗口委托


由于OP正在开发基于文档的应用程序,没有自定义子类
NSWindow
NSWindowController
,因此实现:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    [super windowControllerDidLoadNib:aController];
    [[aController window] setAspectRatio:(NSSize){600,400}];
}
NSDocument
子类中,根据Xcode中基于文档的应用程序模板设置项目的纵横比所需的唯一更改


一般来说,我建议不要使用负责windows和文档的
NSDocument
子类。在我看来,更好的设计是让
NSDocument
子类只处理文档,并创建
NSWindowController
的子类只处理windows—想想看,或者。

@bavariable:我不相信你说的窗口大小必须是整数倍是正确的。我已经完成了
[windowsetaspectratio:[windowframe].size](现在只是再次检查)并且在调整大小方面没有这样的问题。@Josh True;文件可能有点误导。是的。我的类是NSDocument的一个子类。我不能子类化到NSWindow,否则我会破坏NSDocument提供给我的所有其他东西。我确实尝试过使用
-setAspectRatio:
但是,它似乎对我不起作用。我的类可以同时是NSDocument和NSWindow的子类吗?@Joe如何获得对文档窗口的
NSWindow*
引用?不,一个类最多有一个(直接)超类。