如何在NSScrollView中嵌入WebView?

时间:2009-10-13 10:14:00

标签: cocoa webkit nsscrollview

所以我有一个项目,其中有一些内容显示在WebView中,我想坚持下去。我希望标题滚动 WebView内容。现在,WebView通常希望自己进行滚动处理,但您可以告诉它不要使用:

[[webView mainFrame] setAllowsScrolling:NO];

成功地使WebView的滚动条不显示。但是,尽管它嵌入在NSScrollView中,但NSScrollView的滚动条永远不会激活。我只能得出结论,需要告诉WebView调整大小,但我无法弄清楚如何做到这一点。我尝试过以下方法:

NSRect webViewBounds = [webView bounds];
[webView setFrameSize:webViewBounds.size];

但这似乎也不起作用。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我快速浏览了这个文档,可能是一个愚蠢的问题;更改帧大小后,您是否向视图发送了setNeedsDisplay消息?

答案 1 :(得分:0)

替代解决方案:如何在HTML / CSS / JavaScript中表达标头,并将真实内容放在iframe中?您可以遍历框架层次结构以查找该框架的WebFrame对象,并使用DOM(可能由您自己的对象包装)来控制标头。

答案 2 :(得分:0)

代码中的边界和框架应具有相同的大小。将一个设置为另一个不会改变任何内容。

今天我在WebView课上玩了一下。使用我的方法,您不必将标头添加到HTML代码中。注册通知可以为您提供一个起点:

  [[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(webViewDidScroll:)
    name:NSViewBoundsDidChangeNotification object:nil];

然后你可以检查通知发送者的类(假设你只有一个WebView):

- (void)webViewDidScroll:(NSNotification *)aNotification
{
  if ([[aNotification object] isKindOfClass:NSClassFromString(@"WebClipView")])
  {
    // Do whatever you like; scroll your header etc.
  }
}