Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS WebView blank gap

I have embedded a Youtube video in my iOS 8.3 app using youtube's standard embed url (sample) which is working as expected but looking pretty weird. That white gap (blue zone on the view tree inspector) should not be there.

View tree

I can confirm it's not a CSS issue as the inspector shows it is effectively occupying 100% width and height of the uiWebView component.

enter image description here

I have setup constraints to the left, top and right borders to equate the window/layout guides so that's not the problem either. It seems a private _UIWebViewScrollView component is taking all the height i assigned to the UIWebView, and pushing the real content (UIWebViewBrowserView) to the bottom of said area.

ViewTree UIWebViewBrowserView detail

I looked up info on the scroll view class but it seems there's only header files scattered on the web with no real apple docs so i'd rather not mess with that scroll view if possible.

Seems my hunch is right, the same problem was described by someone on another question also regarding a scrollview but the mentioned function to fix the problem either does not exist anymore or is now private. I'm still looking for answers.

like image 538
Machinarius Avatar asked Apr 26 '15 21:04

Machinarius


3 Answers

I fixed it.

  override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews();

    playerWebView.scrollView.contentInset = UIEdgeInsetsZero;
  }

Adding to the edit i made to the question, i forgot swift changes set and get methods for accessor variables as in C#.

like image 186
Machinarius Avatar answered Nov 02 '22 14:11

Machinarius


Swift 3: Removing the default blank top space in UIWebView

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews();

    webView.scrollView.contentInset = UIEdgeInsets.zero;
}
like image 43
Peter Kreinz Avatar answered Nov 02 '22 15:11

Peter Kreinz


The accepted solutions did not work for me. Instead it was just because there was space for the navigation bar title text that I was not using. I got rid of it by adding displayMode: .inline.

    var body: some View {
        VStack {
            WebView(request: URLRequest(url: URL(string: url!)!))
        }.navigationBarTitle(Text("Title"), displayMode: .inline)
    }
like image 1
ajbraus Avatar answered Nov 02 '22 14:11

ajbraus