iPhone SDK - UIWebView has a grey box over it

后端 未结 7 518
长发绾君心
长发绾君心 2021-01-14 01:30

Sometimes, my UIWebView will have a grey box over part or all of the content. I can\'t make heads or tails of why it\'s happening. It happens regularly for certain content.

7条回答
  •  南笙
    南笙 (楼主)
    2021-01-14 02:05

    I ran into the same issue when dynamically resizing a UIWebView. Here's what worked for me:

    #define LAYER_FOR(ui)                        [(ui) layer]
    #define FRAME_FOR(ui)                        [LAYER_FOR((ui)) frame]
    #define SET_FRAME_FOR(ui, frame)             [LAYER_FOR((ui)) setFrame: (frame)]
    
    + (void) setHeightTo: (CGFloat *) height_ptr forView: (UIView *) a_view {
      CGFloat height = *height_ptr;
    
      CGRect existing_frame = [[a_view layer] frame];
      existing_frame.size.height = height;
    
      // need to reassign the same frame !?
      NSLog(@"setting text view: %@ to height: %f", a_view, (float) height);
      SET_FRAME_FOR(a_view, existing_frame);
    }
    
    + (void) resizeWebView: (UIWebView *) webView {
      NSString *js = @"                                                                                               \
        var __html_element = document.getElementsByTagName('html')[0];                                                \
        var __height_string = document.defaultView.getComputedStyle(__html_element, null).getPropertyValue('height'); \
        __height_string.replace('px', ''); \
      ";
    
      NSString *heightString = [webView stringByEvaluatingJavaScriptFromString: js];
      float height = [heightString floatValue];
    
      if (height != UI_VIEW_HEIGHT(webView)) {
        [self setHeightTo: &height forView: webView];
    
        // resize scrollView inside webview to the same height
        UIScrollView *webScroller = [[webView subviews] lastObject];
        [self setHeightTo: &height forView: webScroller];
      }
    }
    

    I called this code from webview's delegate 'webViewDidFinishLoad:' method.

    Basically, the trick is to resize the webScroller inside webview.

    Thanks to Padraig for the suggestion to nudge the webview's subview (the scrollview).

提交回复
热议问题