simonbs
simonbs

Reputation: 8042

Remove elasticity from webview

I have a webview which I would like to remove the elasticity from. As it is now, when scrolling a page that is smaller than the webview, it will make an elasticity effect revealing the background underneath. I would like to remove this.

I have tried doing the following but without success. It finds the WebDynamicScrollBarsView but setting the elasticity of this, does not change anything.

- (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;
}

Does anyone know how to remove the elasticity effect from a webview?

Upvotes: 2

Views: 1762

Answers (1)

Vervious
Vervious

Reputation: 5569

In my subclass of WebView (or you can just do it directly, with webView.mainFrame.frameView.documentView.enclosingScrollView, but this makes it easier for me, personally)

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

Then on finish load, as Anne noted literally as I was typing my answer :) ,

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

I'm not sure if doing it after the content has loaded is necessary, but I don't have my mac with me to try right now.

Upvotes: 6

Related Questions