在iPhone SDK中无法更改UIWebView的背景

有没有办法改变UIWebView背景颜色?

在IB中设置的颜色没有影响UIWebView行为:在加载实际内容之前,它显示为白色(在加载和呈现内容之间引起白色闪光)。

以编程方式设置背景颜色也不会做任何事情。

这是代码:

 @interface Web_ViewViewController : UIViewController { UIWebView *web; } @property (nonatomic, retain) IBOutlet UIWebView *web; @end .... -(void)viewDidLoad { super viewDidLoad; web.backgroundColor = [UIColor blueColor]; NSURL *clUrl = [NSURL URLWithString:@"http://www.apple.com"]; NSURLRequest *req = [NSURLRequest requestWithURL:clUrl]; [web loadRequest:req]; } 

您可以将webview的opaque属性设置为NO,然后在下面设置视图的背景颜色。

[webView setOpaque:NO];

试试这个。 一旦它完成加载,它将褪色UIWebView,你不会看到闪光灯。

 @interface Web_ViewViewController : UIViewController <UIWebViewDelegate> { UIWebView *web; BOOL firstLoad; } @property (nonatomic, retain) IBOutlet UIWebView *web; @end ... (void)viewDidLoad { [super viewDidLoad]; firstLoad = YES; web.delegate = self; web.alpha = 0.0; NSURL *clUrl = [NSURL URLWithString:@"http://www.apple.com"]; NSURLRequest *req = [NSURLRequest requestWithURL:clUrl]; [web loadRequest:req]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { if (firstLoad) { firstLoad = NO; [UIView beginAnimations:@"web" context:nil]; web.alpha = 1.0; [UIView commitAnimations]; } } 

webViewDidFinishLoad中的animation块会在视图加载后淡入视图,或者如果您希望将其视为popup窗口,则只需删除UIView调用即可。

这里没有任何答案为我工作,他们都涉及了一些闪光。 我在这里find了一个工作的答案: http : //www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (我不得不调整延迟到.25,以避免闪烁)。 请记住在InterfaceBuilder中检查UIWebView的“隐藏”标志。

 - (void)webViewDidFinishLoad:(UIWebView *)webView { [self performSelector:@selector(showAboutWebView) withObject:nil afterDelay:.25]; } - (void)showAboutWebView { self.infoWebView.hidden = NO; } 

是的,似乎设置backgroundColor属性对UIWebView没有影响。

我没有一个满意的解决scheme,只有你可以考虑的解决方法。

  • 首先通过设置一个初始的空白HTML页面来改变背景颜色
  • 一旦加载,您加载您的主要URL(例如http://www.apple.com

如果您不等待加载初始HTML页面,则在加载主URL时可能看不到初始背景。 所以你需要使用UIWebViewDelegate的webViewDidFinishLoad:方法。 您可以在您的Web_ViewViewController类中实现该方法,并使您的Web_ViewViewController符合UIWebViewDelegate协议。 最初,在加载HTML页面之前,仍然存在一个白色背景的瞬间闪烁。 不知道如何摆脱这一点。 以下是一个示例:

 - (void)viewDidLoad { [web loadHTMLString: @"<html><body bgcolor=\"#0000FF\"></body></html>" baseURL: nil]; web.delegate = self; } - (void)webViewDidFinishLoad:(UIWebView *)webView { static BOOL loadedMainURLAlready = NO; if (!loadedMainURLAlready) { NSURL *clUrl = [NSURL URLWithString:@"http://apple.com"]; NSURLRequest *req = [NSURLRequest requestWithURL:clUrl]; [webView loadRequest:req]; loadedMainURLAlready = YES; } } 

我有一个解决scheme。 加载后添加Web视图。

 -(void)webViewDidFinishLoad: (UIWebView *)pageView { self.view =pageView; [pageView release]; } 

试试这个。 我从我的应用程序资源中使用了一个背景图像“address.png”。

 NSString *path=[[NSBundle mainBundle] pathForResource:@"address" ofType:@"png"]; NSURL *a=[[NSURL alloc] initFileURLWithPath:[path stringByDeletingLastPathComponent] isDirectory:YES]; NSLog(@"%@",[a description]); NSDictionary *d=[parsedarray objectAtIndex:0]; // generate dynamic html as you want. NSMutableString *str=[[NSMutableString alloc] init]; [str appendString:@"<html><body background=\"address.png\"><table><tr>"]; [str appendFormat:@"<td valign=\"top\" align=\"left\"><font size=\"2\"><b>Market Address</b><br>%@,<br>%@,<br>%@</font></td>", ([d valueForKey:@"address1"])?[d valueForKey:@"address1"]:@"", ([d valueForKey:@"address2"])?[d valueForKey:@"address2"]:@"", ([d valueForKey:@"address3"])?[d valueForKey:@"address3"]:@"" ]; [str appendFormat:@"<td valign=\"top\" align=\"left\"><font size=\"2\"><b>Contact Number</b><br>%@<br><b><a href=\"%@\">Email Us</a><br><a href=\"%@\">Visit Website</a></b></font></td>", [d valueForKey:@"phone"],[d valueForKey:@"email"],[d valueForKey:@"website"]]; [str appendString:@"</tr></table></body></html>"]; // set base url to your bundle path, so that it can get image named address.png [wvAddress loadHTMLString:str baseURL:a]; [str release]; str=nil; [a release]; 

在Xcode 4.6.3中

 - (void)viewDidLoad { [super viewDidLoad]; self.viewWeb.hidden = YES; self.viewWeb.delegate = self; // this allows the UIWebView box to your background color seamlessly. self.viewWeb.opaque = NO; } 

这可能有帮助

(Xcode 5 iOS 7)适用于iOS 7和Xcode 5的通用应用程序示例。这是一个开源项目/示例位于此处: 链接到SimpleWebView(项目编码和源代码示例)

webview.backgroundColor = [UIColor clearColor];