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

Set NSWindow as full width and height not working

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

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

但是,我希望它占据整个屏幕(不是全屏)- 但我也不想将 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

您添加的代码可能会崩溃或什么都不做:

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

最后一行发送消息给myWindow,也就是nil,所以直接忽略消息。

您可以做几件不同的事情。您遇到的问题是您没有获得对您想要最大化的实际 window 的引用,它在头文件中定义为 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 已经有一个方法可以最大化 window 来占据整个屏幕:performZoom:.

[self.window performZoom:nil];

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