在Xcode示例中调整窗口大小的问题

时间:2015-07-01 20:07:42

标签: objective-c xcode macos

我已下载envoy。然后在 GLEssentialsWindowController 类实现中的方法 awakeFromNib 中添加了一个以编程方式调整窗口大小:

-(void) awakeFromNib
{
  NSRect rect = [view convertRectToBacking:NSMakeRect(0,0,500,500)];
  [self.window setFrame:rect display:YES animate:NO];
}

这里最有趣。当我在工作的iMac上进行如此简单的操作时,根本没有问题。窗口大小成为我的预期。 但是当我在MacBook窗口上执行此操作时,会将大小调整为存储在 .xib 文件中的值。然后我手动将窗口调整为一些新的大小并退出应用程序。然后再次启动它。窗口大小调整为此窗口在关闭之前的最后一次启动时的大小。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

据我所知,即使在窗口初始化之后, NSOpenGLView 类也会调用resize方法,这就是为什么在删除 awakeFromNib 事件后不允许窗口调整大小的唯一解决方案窗口样式的可调整大小的掩码:

[window setStyleMask:[window styleMask] & ~NSResizableWindowMask];

所以最终的解决方案如下:

- (void) awakeFromNib
{
 [self.window setStyleMask:[self.window styleMask] & ~NSResizableWindowMask];
 NSRect rect = [view convertRectToBacking:NSMakeRect(0,0,500,500)];
 [self.window setFrame:rect display:YES animate:NO];
}

因此,目标窗口的大小将调整为500 x 500,并且与 .xib 文件中存储的大小无关。