Keith Peck
Keith Peck

Reputation: 499

Adding header view to WKWebView ScrollView

Has anyone managed to successfully add a header or footer view to a WKWebView ScrollView?

I'm currently trying to do this using the method described here for a UIWebView Adding a header view to a UIWebView similar to Safari and Articles.

When this method is used in a WKWebView the content view origin.y is correctly changed but content is cut off at the bottom.

Using the scroll view content offset is also not possible as it breaks fixed positioned CSS elements in the web view.

Upvotes: 49

Views: 4202

Answers (2)

Surbhi Garg
Surbhi Garg

Reputation: 414

In webView Delegate method

- (void)webViewDidFinishLoad:(UIWebView *)webView

add the following codebase,

mainWebViewObj.scrollView.contentInset = UIEdgeInsetsMake(headerView.frame.size.height,0.0,headerView.frame.size.height,0.0);
mainWebViewObj.scrollView.backgroundColor = [UIColor whiteColor];

if(![headerView superview])
{
    [webView.scrollView addSubview:headerView];
    [webView.scrollView bringSubviewToFront:headerView];
}
[mainWebViewObj.scrollView setContentOffset:
 CGPointMake(0, -mainWebViewObj.scrollView.contentInset.top) animated:NO];

this worked perfect for me. Hope it solves your problem.

Upvotes: 1

TomSwift
TomSwift

Reputation: 39502

Here's an example that I think does as you describe. It offsets the web content by setting contentInset on the scrollView, and by offsetting the header view frame by a negative amount:

@implementation ViewController
{
    WKWebView*  _webView;

    UIView*     _headerView;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    _webView = [[WKWebView alloc] initWithFrame: self.view.bounds];
    [self.view addSubview: _webView];

    [_webView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString: @"http://www.stackoverflow.com"]]];


    [_webView.scrollView setContentInset: UIEdgeInsetsMake(100, 0, 0, 0)];

    _headerView = [[UIView alloc] initWithFrame: CGRectMake(0, -100, 375, 100)];
    _headerView.backgroundColor = [UIColor redColor];
    [_webView.scrollView addSubview: _headerView];
}

- (void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    _webView.frame = self.view.bounds;

    CGRect f = _headerView.frame;
    f.size.width = _webView.bounds.size.width;
    _headerView.frame = f;
}

Upvotes: 0

Related Questions