将NSWindow设置为全宽和高度不起作用

时间:2016-06-21 16:26:14

标签: xcode macos xcode7 nswindow

我在这里使用一个简单的应用程序样板: https://github.com/hiven/WebViewFinagler

它只是在加载时打开谷歌。我编译了它,它工作正常,但它打开一个非常小的窗口(480 x480)。我可以看到x-code中的侧边菜单,但它只允许我设置窗口的位置和窗口的大小(以像素为单位)。

但是,我想要占用整个屏幕(不是全屏) - 但我也不想将我的mac的分辨率硬编码到其中,因为我希望它能够在具有不同屏幕分辨率的笔记本电脑上工作。

它不会让我放入100%的宽度和高度,所以我如何打开这个应用程序并占据完整的可用屏幕区域?

在我的代码中,我有这个,但它不起作用,应用程序只是从底角小开始:

MDAppDelegate.m

#import "MDAppDelegate.h"
#import <WebKit/WebKit.h>


@implementation MDAppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSWindow* myWindow; //Your window object to maximize
    [myWindow setFrame:[[NSScreen mainScreen] visibleFrame] display:YES];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.google.com/"]];
    [self.webView.mainFrame loadRequest:request];
}

@end

1 个答案:

答案 0 :(得分:1)

您添加的代码可能会崩溃或无所事事:

NSWindow* myWindow; // uninitialized pointer refers to nothing (nil)
[myWindow setFrame:[[NSScreen mainScreen] visibleFrame] display:YES];

最后一行向myWindow发送了一条消息nil,因此消息将被忽略。

你可以做几件不同的事情。您遇到的问题是您没有获得对要最大化的实际窗口的引用,该窗口在头文件中定义为window

@property (assign) IBOutlet NSWindow *window;

因此,您理论上可以将代码更改为以下内容并且可以正常工作:

NSWindow* myWindow = self.window;
[myWindow setFrame:[[NSScreen mainScreen] visibleFrame] display:YES];

但是,摆脱第一行更有意义,只需直接使用self.window

[self.window setFrame:[[NSScreen mainScreen] visibleFrame] display:YES];

也就是说,我们可以进一步简化它,因为NSWindow已经有一个方法可以最大化窗口占据整个屏幕:performZoom:

[self.window performZoom:nil];

通过在Interface Builder中为窗口设置自动保存名称,您可以在退出并重新启动时自动保存窗口的大小和尺寸。 (我想我忘了在示例代码项目中添加一个)。