【问题标题】:Set NSWindow as full width and height not working将 NSWindow 设置为全宽和全高不起作用
【发布时间】:2016-06-22 06:19:30
【问题描述】:

我在这里使用了一个简单的应用程序样板: 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

【问题讨论】:

    标签: xcode macos xcode7 nswindow


    【解决方案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 中为窗口设置自动保存名称,在退出和重新启动时自动保存窗口的大小和尺寸。 (我想我忘了在那个示例代码项目中添加一个)。

    【讨论】:

    • [self.window performZoom:nil];效果很好,非常感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 2019-06-08
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多