【问题标题】:Remove elasticity from webview从 webview 中删除弹性
【发布时间】:2012-06-23 13:52:26
【问题描述】:

我有一个网络视图,我想从中移除弹性。就像现在一样,当滚动一个比 webview 小的页面时,它会产生弹性效果,露出下面的背景。我想删除它。

我已尝试执行以下操作但没有成功。它找到了WebDynamicScrollBarsView,但设置它的弹性,并没有改变任何东西。

- (void)awakeFromNib
{
    NSScrollView *scrollView = [self findScrollViewInSubviews:self.subviews];
    scrollView.horizontalScrollElasticity = NSScrollElasticityNone;
    scrollView.verticalScrollElasticity = NSScrollElasticityNone;
}

- (NSScrollView *)findScrollViewInSubviews:(NSArray *)subviews
{
    for (NSView *view in subviews)
    {
        if ([view isKindOfClass:[NSScrollView class]])
            return (NSScrollView *) view;
        else
            return [self findScrollViewInSubviews:view.subviews];
    }

    return nil;
}

有谁知道如何从 webview 中移除弹性效果?

【问题讨论】:

  • 哦,对不起!我正在删除答案。
  • 以下应该可以工作:webView.mainFrame.frameView.documentView.enclosingScrollView.verticalScrollElasticity = NSScrollElasticityNone;
  • @Anne 很遗憾,这没有任何效果。

标签: macos cocoa webview


【解决方案1】:

在我的 WebView 子类中(或者您可以直接使用 webView.mainFrame.frameView.documentView.enclosingScrollView,但这对我个人而言更容易)

// return the scroll view that we are currently using, if applicatble
- (NSScrollView *)mainScrollView {
    return [[[[self mainFrame] frameView] documentView] enclosingScrollView]; // can be nil
}

然后在完成加载时,正如安妮在我输入答案时所说的那样:),

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
    NSScrollView *mainScrollView = [sender mainScrollView];
    [mainScrollView setVerticalScrollElasticity:NSScrollElasticityNone]; 
    [mainScrollView setHorizontalScrollElasticity:NSScrollElasticityNone];
}

我不确定是否有必要在内容加载后执行此操作,但我现在没有我的 mac 可以尝试。

【讨论】:

  • 这修复了它。谢谢! :-)
  • 这需要在内容加载后进行,因为它似乎在 didCommitLoadForFrame 和 didFinishLoadForFrame 之间重置
猜你喜欢
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2018-12-04
  • 2012-03-29
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多