【问题标题】:How do I embed a WebView in an NSScrollView?如何在 NSScrollView 中嵌入 WebView?
【发布时间】:2009-10-13 10:14:00
【问题描述】:

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

[[webView mainFrame] setAllowsScrolling:NO];

这成功地使 WebView 的滚动条不出现。然而,尽管它嵌入在 NSScrollView 中,但 NSScrollView 的滚动条永远不会激活。我只能得出结论,需要告诉 WebView 调整大小,但我不知道该怎么做。我尝试了以下方法:

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

但这似乎也不起作用。

有什么建议吗?

【问题讨论】:

    标签: cocoa webkit nsscrollview


    【解决方案1】:

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

    【讨论】:

    • 是的,我正在考虑尝试。看起来像一个kludge,但如果这就是它所需要的...... =)
    【解决方案2】:

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

    【讨论】:

    • 是的,我是。没有不同。我怀疑问题可能是 WebView 的大小是基于我在 Interface Builder 中给它的大小。我不确定如何告诉它它可以随心所欲地大,也不知道如何找出它的内容可以有多大。我可能会尝试给它一个巨大的垂直尺寸,看看效果如何。
    【解决方案3】:

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

    今天我玩了一点 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.
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多