有没有办法更改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];
}
答案 0 :(得分:180)
您可以将webview的opaque属性设置为NO,然后设置下方视图的背景颜色。
[webView setOpaque:NO];
答案 1 :(得分:17)
试一试。一旦完成加载,它就会淡化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中的动画块一旦加载就会淡出视图,或者如果你想让它弹出,那么只需删除UIView调用。
答案 2 :(得分:7)
这里没有任何答案对我有用,它们都涉及到某种闪光。我在这里找到了一个有效的答案: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;
}
答案 3 :(得分:1)
是的,似乎设置backgroundColor属性对UIWebView没有影响。
我没有一个满意的解决方案,只有你可以考虑的解决方法。
如果您不等待加载初始HTML页面,则在加载主URL时可能看不到初始背景。因此,您需要使用UIWebViewDelegate的webViewDidFinishLoad:方法。您可以在Web_ViewViewController类中实现该方法,并使Web_ViewViewController符合UIWebViewDelegate协议。最初,在加载empth 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;
}
}
答案 4 :(得分:1)
我有一个解决方案。 加载后添加Web视图。
-(void)webViewDidFinishLoad: (UIWebView *)pageView {
self.view =pageView;
[pageView release];
}
答案 5 :(得分:0)
试一试。我在应用程序资源中使用了背景图片“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];
答案 6 :(得分:0)
在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;
}
答案 7 :(得分:0)
这可能会有所帮助
(Xcode 5 iOS 7)适用于iOS 7和Xcode 5的通用应用程序示例。这是一个开源项目/示例,位于此处:Link to SimpleWebView (Project Zip and Source Code Example)
webview.backgroundColor = [UIColor clearColor];