【问题标题】:Resizing a WebView instance调整 WebView 实例的大小
【发布时间】:2026-01-10 20:25:02
【问题描述】:

我刚刚开始学习 OSX Cocoa 应用程序开发。我想在本机 OSX 窗口中显示一个网站。我认为 WebView 将是正确的方法。我希望 webview 始终占据包含窗口大小的 100%。

经过一番挣扎,我明白了如何捕捉“窗口调整大小”事件,但我不知道如何根据窗口新大小调整网络视图的大小。

这是我目前所拥有的:

AppDelegate.h

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>

@interface AppDelegate : NSObject <NSApplicationDelegate, NSWindowDelegate>

@property (assign) IBOutlet NSWindow *window;

@property (weak) IBOutlet WebView *websiteWebview;

@end

AppDelegate.m

#import "AppDelegate.h"

@implementation AppDelegate

- (NSSize) windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
    WebView *view = [self websiteWebview];
    [view setFrame:CGRectMake(0, 0, 1000, 1000)];
    return frameSize;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [[self window] setDelegate:self];
    NSURL *url = [[NSURL alloc] initWithString:@"http://conradk.com"];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [[[self websiteWebview] mainFrame] loadRequest:request];
}

@end

我认为调用 [view setFrame:CGRectMake(0, 0, 1000, 1000)] 也会调整 Web 视图的大小,但似乎并非如此。

请提供任何提示/提示? WebView 是正确的方法吗?感谢您的帮助!

【问题讨论】:

  • 您的网页视图根本没有调整大小?还是调整大小错误?
  • 它根本没有调整大小。更准确地说,如果我使窗口水平变大,webview 会转到窗口的左下方(但宽度和高度保持不变)。对于任何其他类型的调整大小,什么都不会发生。在所有情况下,webview 的大小都保持不变。

标签: objective-c macos cocoa webview


【解决方案1】:

您需要将您的WebView 设为窗口的contentView 的一部分。

[self.window setContentView:self.websiteWebview];

默认情况下,这将使webView 随窗口自动调整大小。如果你想让 webview 做一些事情而不是匹配窗口的大小,你只需要弄乱大小。

【讨论】:

  • 这似乎对我不起作用。你试过了吗?不过感谢您的努力!
  • 您删除(注释掉)windowWillResize 中的内容了吗?我还没有尝试过……我在这里无法使用 Mac。而且我并不完全熟悉为 OSX 开发,只是 iOS,但有很多重叠......
  • 是的,我做到了。但是您的回答很有帮助,因为它帮助我理解了一些事情,所以我查看了源代码!这是一个可行的解决方案:[[self window] setContentView:[self websiteWebview]];
  • 好的,所以正确的答案就是我刚刚编辑的内容(所以将来看到这个的任何人都会在答案中看到正确的方式,而不仅仅是评论)?
  • 不需要autoResizeMask 的东西。我猜这是窗口主视图的默认设置。
最近更新 更多