【问题标题】:Displaying a background image on UIWebView在 UIWebView 上显示背景图像
【发布时间】:2011-03-20 00:21:41
【问题描述】:

我正在尝试构建一个用于所有意图和目的的本机应用程序是 HTML/CSS 和 Javascript。一切正常,但是当 UIWebView 加载时,在填充 DOM、检索图像等时会有延迟。

到底有没有在 UIWebView 上显示背景图像,或者它后面的东西?理想情况下,这将与启动屏幕相同,因此不会影响从斜线过渡到应用的体验。

谢谢

罗比

【问题讨论】:

    标签: iphone html uiwebview


    【解决方案1】:

    我必须在我的代码中执行以下操作才能在我的 UIWebViews 上获得透明背景 - 我通常在 UIViewController 的 viewDidLoad 方法中执行此操作

    self.webView.backgroundColor = [UIColor clearColor];
    self.webView.opaque = NO;
    

    我认为您也可以在 UIWebViews 属性中的 Interface Builder 中进行这些更改。

    --- 编辑---

    而对于背景图片,您可以在 UIWebView 后面放置一个 UIImageView,因为您已经给它一个透明背景。

    【讨论】:

    • iOS4 为所有视图提供了 .backgroundView 的新属性,无需将 .backgroundColor 设置为 clearColor 然后在其后面放置图像。但是我不同意在这里添加背景图片(网页将逐渐加载顶部)是正确的方法...
    • 所以这肯定行得通,我在从不同的环境中加载时遇到了一些问题,但无论如何这是我需要学习的东西。
    • WTF!伙计,哇哇哇哇哇哇哇哇哇哇哇哇哇! :)
    • 这是一个很好的解决方案,imo,因为它很简单,并且使用JS document.close()/document.open() 或其他方法清除webview将允许背景图像再次显示.
    【解决方案2】:
     webView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"senthil.jpg"]];
    

    【讨论】:

    • 这没有得到任何赞成票的原因是什么?它对我来说非常有用。唯一的细节是你必须取消选中“不透明”复选框,它就像一个魅力。
    【解决方案3】:

    我不相信您想将 UIWebView 设置为透明并在其后面显示图像。

    相反,在 UIWebView 加载其内容之前,您应该有某种视图(可能带有您建议的图片,可能带有 UIIndicator 和“使页面变暗”的半透明视图)。

    为此,首先你的类应该订阅 UIWebViewDelegate 协议:

    @interface myWebView : UIViewController <UIWebViewDelegate> {
      // variables etc
    }
    

    然后,您可以显示加载视图:

    -(void)viewDidLoad {
      myView.hidden = NO;
    }
    

    最后,您可以覆盖 webViewDidFinishLoad 方法以在加载后将其隐藏

    - (void)webViewDidFinishLoad:(UIWebView *)localwebView {
        myView.hidden = YES;
    }
    

    【讨论】:

    • 在加载和呈现 HTML 和 CSS 时,是否会为 UIWebView 之类的东西触发适当的事件?类似于 jQuery 中的 $(document).ready() 等价物?我一定会试一试,谢谢。
    【解决方案4】:

    将图像添加到 XIB 中的视图控制器或“启动图像”的 Plist。这将从头开始显示启动画面。在 viewDidLoad 中加载 webView 时隐藏 webView

    webView.hidden = YES;
    

    像往常一样在 viewDidLoad 中加载带有 HTML 内容的 webView

    加载 webView 后,稍后执行更新视图。我认为这将为委托功能提供一些时间来完成并继续进行 UI 更新。

    - (void)webViewDidFinishLoad:(UIWebView *)webView {
        [self performSelector:@selector(updateWebView) withObject:nil afterDelay:1];
    }
    
    -(void) updateWebView {
        webView.hidden = NO;
        self.view = webViewElement;
        // or
        [self.view addSubview:webViewElement];
    }
    

    我试过上面没有白屏。

    【讨论】: