我想在Web视图中设置简单的html内容,然后根据其内容调整大小。
要在Web视图中设置简单的html内容,我使用了这段代码,它运行正常:
[[myWebView mainFrame] loadHTMLString:webViewContents baseURL:baseURLFramed];
现在,如果内容超过其实际大小,则它会显示在Web视图中,同时显示其中的垂直和水平滚动条。我想设置一些默认宽度并根据其内容管理高度,以便既不出现水平也不出现垂直滚动。
有人能建议我一些解决方案吗?
谢谢,
Miraaj
答案 0 :(得分:20)
您可以注册为WebView
的帧加载委托,当页面加载时,您可以询问主框架的文档视图的大小,并调整WebView
的大小。确保关闭框架上的滚动条,否则会出现问题。
请注意,某些页面可能非常大,当我测试daringfireball.net时,它的高度为17612点,这显然太大而无法在屏幕上显示。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
//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 new frame
NSRect newWebViewRect = NSMakeRect(webViewRect.origin.x,
webViewRect.origin.y - (NSHeight(webFrameRect) - NSHeight(webViewRect)),
NSWidth(webViewRect),
NSHeight(webFrameRect));
//set the frame
[webView setFrame:newWebViewRect];
//NSLog(@"The dimensions of the page are: %@",NSStringFromRect(webFrameRect));
}
}
答案 1 :(得分:2)
另一种方法是向DOM询问内容的高度。
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
NSString* heightOutput = [sender stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"foo\").scrollHeight;"];
NSInteger height = [heightOutput integerValue];
[[self splitView] setPosition:height + 10 ofDividerAtIndex:0];
}
这里的关键点是将您的内容放在命名元素中,以便可以使用getElementById。我的实现使用了一个简单的<div id="foo">
元素。
在我的特定情况下,我的WebView位于NSSplitView内部,因此首先将WebView的高度重置为较小的值导致闪烁。
我有一个展示它的示例项目here。