Y at-il un moyen de changer la couleur de fond pour UIWebView
?
Aucune des couleurs définies dans le comportement de l’effet UIWebView
de IB: avant que le contenu réel ne soit chargé, il s’affiche en blanc (ce qui provoque un flash blanc entre le moment où il est chargé et le contenu rendu).
Définir la couleur de fond par programme ne fait rien non plus.
Voici le code:
@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];
}
Vous pouvez définir la propriété opaque de la vue Web sur NO, puis définir la couleur d'arrière-plan de la vue située en dessous.
[webView setOpaque:NO];
Essayez ceci. Une fois le chargement terminé, UIWebView disparaîtra et vous ne verrez plus le flash.
@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];
}
}
Le bloc d'animation dans webViewDidFinishLoad fondra la vue une fois qu'elle est chargée, ou si vous préférez l'avoir activée, supprimez simplement les appels UIView.
Aucune des réponses ici ne fonctionnait pour moi, elles impliquaient toutes encore une sorte de flash. J'ai trouvé une réponse pratique ici: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (J'ai dû ajuster le délai à .25 pour éviter le clignotement). N'oubliez pas de vérifier l'indicateur "masqué" de UIWebView dans InterfaceBuilder.
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self performSelector:@selector(showAboutWebView) withObject:nil afterDelay:.25];
}
- (void)showAboutWebView
{
self.infoWebView.hidden = NO;
}
Oui, il semble que définir la propriété backgroundColor n'a aucun effet sur UIWebView.
Je n'ai pas de solution satisfaisante, seulement une solution de contournement que vous pouvez envisager.
Si vous n'attendez pas le chargement de la page HTML initiale, il est possible que l'arrière-plan initial ne soit pas visible pendant le chargement de l'URL principale. Vous devrez donc utiliser la méthode webViewDidFinishLoad: de UIWebViewDelegate. Vous pouvez implémenter cette méthode dans votre classe Web_ViewViewController et rendre votre Web_ViewViewController conforme au protocole UIWebViewDelegate. Initialement, il reste un scintillement momentané de fond blanc jusqu'au chargement de la page HTML empth. Vous ne savez pas comment vous en débarrasser? Ci-dessous un exemple:
- (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;
}
}
J'ai une solution . Ajoutez la vue Web après son chargement.
-(void)webViewDidFinishLoad: (UIWebView *)pageView {
self.view =pageView;
[pageView release];
}
Cela pourrait aider
(Xcode 5 iOS 7) Exemple d’application universelle pour iOS 7 et Xcode 5. Il s’agit d’un projet open source/exemple situé ici: Lien vers SimpleWebView (exemple de projet Zip et Code source)
webview.backgroundColor = [UIColor clearColor];
Dans 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;
}
Essayez ceci. J'ai utilisé une image d'arrière-plan "address.png" à partir des ressources de mon application.
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];