web-dev-qa-db-fra.com

Impossible de changer le fond pour UIWebView dans iOS

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];
}
58
leon

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];
180
Kaveh

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.

17
Adolfo

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;
}
7
Bogatyr

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.

  • Commencez par changer la couleur de fond en définissant une page HTML vide
  • Une fois que cela a été chargé, vous chargez votre URL principale (par exemple http://www.Apple.com ).

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;
    }
}
1
pythonquick

J'ai une solution . Ajoutez la vue Web après son chargement.

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

    self.view =pageView;
    [pageView release];
}
1
user377808

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];

0
Matthew Ferguson

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;

}
0
Drew Harris

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];
0
Sagar R. Kothari