gpt4 book ai didi

objective-c - WebView 动态调整大小以适应内容大小

转载 作者:行者123 更新时间:2023-12-03 16:55:09 26 4
gpt4 key购买 nike

我在调整 WebView 元素的大小以适应其内容时遇到问题。我不想调整内容的大小,我希望 WebView 及其包含的自定义 View 和 NSWindow 调整大小以适应内容。

目前,我尝试使用 JavaScript 来获取宽度和高度并调整 3 个元素的大小,以及使用 NSRect 和 setFrameSize,但没有成功(如下所示)。

所以基本上,如果我有一个带有自定义 View 和 Web View 的 NSWindow,我如何让它们调整大小以适应 WebView 的内容?

先谢谢大家了!

这就是我目前所拥有的,它只会造成一团糟(它不会调整主窗口的大小,并使窗口的内容溢出)。

NSString *width = [_myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollWidth;"];
NSString *height = [_myWebView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

NSSize size;
size.width = [width floatValue];
size.height = [height floatValue];

NSRect mySize = NSMakeRect(_window.frame.origin.x, _window.frame.origin.y, size.width, size.height);
[_window setFrame:mySize display:YES]; // Resize main NSWindow
[_webViewView setFrameSize:size]; // Resize custom view of main NSWindow
[_myWebView setFrameSize:size]; // Resize WebView in custom view

最佳答案

据我所知,您有一个包含自定义 View 的窗口,该 View 本身包含一个 Web View 。

您想要将内容加载到 Web View 中,并让 Web View 的框架更改大小以适应该内容。您还希望包含的 View 和窗口相应地调整大小。

一旦您知道如何根据其内容调整 Web View 的大小,如 my answer to this other question 中所述,然后您可以轻松地相应地调整容器的大小。

我将在这里重复我的答案,并添加调整包含对象大小的内容。

正如我在其他答案中所指出的,您无法提前知道内容有多大,并且许多网站太大而无法在屏幕上显示。您可能需要将窗口的高度限制为屏幕高度才能发挥作用。

- (void)loadWebPage
{
//set ourselves as the frame load delegate so we know when the window loads
[webView setFrameLoadDelegate:self];

//turn off scrollbars in the frame
[[[webView mainFrame] frameView] setAllowsScrolling:NO];

//load the page
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://daringfireball.net"]];
[[webView mainFrame] loadRequest:request];
}

//called when the frame finishes loading
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)webFrame
{
if([webFrame isEqual:[webView mainFrame]])
{
//get the rect for the rendered frame
NSRect webFrameRect = [[[webFrame frameView] documentView] frame];
//get the rect of the current webview
NSRect webViewRect = [webView frame];

//calculate the difference from the old frame to the new frame
CGFloat deltaX = NSWidth(webFrameRect) - NSWidth(webViewRect);
CGFloat deltaY = NSHeight(webFrameRect) - NSHeight(webViewRect);

//make sure our web view and its superview resize automatically when the
//window resizes
[webView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[[webView superview] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];


//set the window's frame, adjusted by our deltas

//you should probably add some code to constrain the size of the window
//to the screen's content size
NSRect windowFrame = window.frame;
[webView setFrameSize:NSMakeSize(NSWidth(window.frame) + deltaX, NSHeight(window.frame) + deltaY)];

//turn scroll bars back on
[[[webView mainFrame] frameView] setAllowsScrolling:YES];
}
}

关于objective-c - WebView 动态调整大小以适应内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com