【问题标题】:How to control the color of a UIWebView (before contents load)?如何控制 UIWebView 的颜色(在内容加载之前)?
【发布时间】:2011-01-30 07:17:23
【问题描述】:

我试图在其内容加载之前有一个黑色的 UIWebView。在 IB 中,我尝试将 UIWebView 的背景颜色设置为黑色,以及使其具有透明背景并使其父视图的背景为黑色。两者都不起作用。当我的 UIWebView 加载它的背景是白色的。我该如何解决这个问题?

*我希望这不会归结为必须先加载一个 html 字符串(在加载我的实际网页内容之前)才能将背景设置为黑色而不是 CSS。

【问题讨论】:

标签: iphone objective-c xcode uiview uiwebview


【解决方案1】:

要消除这种白色闪烁,我只需将 backgroundColor 更改为我的视图颜色。我的代码使用紫色来显示更一般的示例。黑色被简单地用作UIColor.black

编辑 loadView 对我不起作用,但 viewWillAppear 工作正常

override func viewWillAppear(_ animated: Bool) {
    ...
    webView.isOpaque = false
    webView.backgroundColor = UIColor(red: 41/255, green: 45/255, blue: 91/255, alpha: 1)
    ...
}

【讨论】:

    【解决方案2】:

    试试这个对我有用,

    按照以下步骤,

    设置 UIview 和 webview opaque = NO 并且背景颜色为白色

    在加载网页视图之前添加下面的代码行,

      _webViewOutlet.backgroundColor = [UIColor colorWithWhite:1 alpha:1]; 
    

    希望这对某人有所帮助

    【讨论】:

      【解决方案3】:

      在 WebView 上添加一个带有自定义颜色背景(我使用黑色)的 UIView(我使用 blackView),然后在加载 WebView 时显示它并在加载时隐藏。 WebView 必须具有透明背景,并且根视图必须具有与您的自定义颜色相同的背景颜色(在我的情况下为黑色)

      • viewDidLoad() view.backgroundColor = UIColor.blackColor() webView.opaque = false

      • webViewDidStartLoad(webView: UIWebView) blackView.alpha = 1

      • webViewDidFinishLoad(webView: UIWebView) blackView.alpha = 0

      【讨论】:

        【解决方案4】:

        实际上设置背景颜色并不能使网页视图全黑。网页的内容呈现在 Web 视图中的子视图中,一个 Web 视图包含许多未记录的子视图,包括一个允许您滚动内容的 UIScrollView,一个 UIScrollView 包含用于绘制 Web 内容的 UIWebDocumentView。它们在你的 web view 的背景之上,所以它们覆盖了背景,你可以看到 UIWebDocumentView 并且设置背景颜色不能让你的 web view 完全变黑。

        我想解决方案是,您可以尝试在 Web 视图上放置一个黑色视图,并在调用 webViewDidFinishLoad:webViewDidStartLoad: 等委托方法时隐藏该视图。

        【讨论】:

        • 内存较少的解决方案是在 viewwillappear 或 didstartload/didfinishload 上隐藏/显示 webview 本身(这实际上是我这样做的方式)。
        • [webView setOpaque:NO];
        【解决方案5】:

        对于 iOS 7,这是另一个示例。 “Self”是一个被推送到导航控制器堆栈的 UIViewController:

        - (void) loadView
        {
            UIWebView *webView = [[UIWebView alloc] initWithFrame: [[UIScreen mainScreen] bounds]];      // iOS 7 - make the web view the entire display
        
        // -- http://stackoverflow.com/questions/2491654/how-to-control-the-color-of-a-uiwebview-before-contents-load --
        
            webView.backgroundColor = [[Settings sharedInstance] backgroundColor];
            webView.opaque          = NO;                                               // setting this to NO fixes the background color problem
            webView.delegate        = self;
        
            self.view = webView;
        
            NSBundle      *thisBundle = [NSBundle mainBundle];
            NSString            *path = [thisBundle pathForResource: @"Instructions" ofType: @"html"];
               NSURL *instructionsURL = [[NSURL alloc] initFileURLWithPath: path];
        
            [webView loadRequest: [NSURLRequest requestWithURL: instructionsURL]];
        }
        

        【讨论】:

          【解决方案6】:

          其实这很简单:

          [self.webView setOpaque:NO];
          self.webView.backgroundColor = [UIColor purpleColor];
          

          这将显示背景颜色,并且一旦 webview 加载它就会很高兴地消失。

          【讨论】:

            【解决方案7】:

            我这样做的方法是将 UIWebView 放在黑色视图上。然后,我们将网页和webview设置为清晰。适用于 iOS 4.2。

            在超级视图上:

            view.backgroundColor = [UIColor blackColor];
            

            在 web 视图上:

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

            在网页 HTML 中:

            <body style="background-color:transparent;">
            

            【讨论】:

            • webView.opaque = NO; webView.backgroundColor = [UIColor clearColor];为我工作!谢谢
            • 我可以确认这仍然适用于 iOS 6.1 和某个更新版本的 iOS :)
            猜你喜欢
            • 1970-01-01
            • 2011-02-27
            • 1970-01-01
            • 2010-10-06
            • 1970-01-01
            • 1970-01-01
            • 2013-01-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多