将 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 的大小和维度。 (我想我忘了在那个示例代码项目中添加一个)。
我在这里使用一个简单的应用样板: 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 的大小和维度。 (我想我忘了在那个示例代码项目中添加一个)。