58

有没有办法改变背景颜色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];
}
4

8 回答 8

180

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

[webView setOpaque:NO];
于 2010-03-12T13:14:56.557 回答
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 调用。

于 2009-10-12T05:14:13.983 回答
7

None of the answers here worked for me, they all involved still some sort of flash. I found a working answer here: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (I had to adjust the delay to .25 to avoid the flashing). Remember to check the UIWebView's "hidden" flag in InterfaceBuilder.

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

- (void)showAboutWebView 
{
    self.infoWebView.hidden = NO;
}
于 2010-05-10T18:31:22.703 回答
1

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

我没有令人满意的解决方案,只有您可以考虑的解决方法。

  • 首先改变背景颜色,通过设置一个初始的空 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;
    }
}
于 2009-10-10T05:46:08.087 回答
1

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

-(void)webViewDidFinishLoad: (UIWebView *)pageView {

    self.view =pageView;
    [pageView release];
}
于 2011-01-16T09:42:42.853 回答
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;

}
于 2013-08-27T18:00:42.103 回答
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];
于 2010-04-14T07:12:32.320 回答
0

这可能会有所帮助

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

webview.backgroundColor = [UIColor clearColor];

于 2014-01-21T04:38:44.950 回答