58 votes

Ne pouvez pas modifier l'arrière-plan pour UIWebView dans le SDK de l'iPhone

Est-il un moyen de changer la couleur de fond pour l' UIWebView?

Aucun des couleurs définies dans le IB effet UIWebView comportement: avant le contenu réel est chargé, il montre que jusqu'blanc (provoquant un éclair blanc entre le moment où il est chargé et le contenu est rendu).

Réglage de la couleur d'arrière-plan 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];
}

180voto

Kaveh Points 1577

Vous pouvez définir l'opacité de la propriété de la webview NON et puis définissez la couleur de fond de la vue de dessous.

[webView setOpaque:NO];

17voto

Adolfo Points 2314

Donner à ceci un essai. Il va s'estomper la UIWebView dans une fois qu'il a fini de se charger, et vous ne verrez pas 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 va disparaître de la vue dans une fois que c'est chargé, ou si vous préférez avoir de la pop sur ensuite, il suffit de retirer le UIView appels.

7voto

Bogatyr Points 12027

Aucune des réponses ici a fonctionné pour moi, ils sont tous impliqués toujours une sorte de flash. J'ai trouvé un travail de réponse ici: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (j'ai dû régler le retard à .25 pour éviter le clignotement). N'oubliez pas de vérifier la UIWebView "caché" drapeau dans InterfaceBuilder.

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

- (void)showAboutWebView 
{
    self.infoWebView.hidden = NO;
}

1voto

pythonquick Points 4314

Oui, il semble que le réglage de la propriété backgroundColor n'a aucun effet sur la UIWebView.

Je n'ai pas de solution satisfaisante, seule une solution de contournement que vous pouvez envisager.

  • Premier changement de la couleur d'arrière-plan, par la fixation d'un vide initial de la page HTML
  • Une fois chargé, vous chargez votre URL principale (par ex. http://www.apple.com)

Si vous n'attendez pas que la première page HTML à charger, vous ne pourriez pas voir l'arrière plan initial, tandis que l'URL principale est en cours de chargement. Ainsi, vous aurez besoin d'utiliser la UIWebViewDelegate de webViewDidFinishLoad: la méthode. Vous pouvez mettre en œuvre cette méthode dans votre Web_ViewViewController classe, et faire de votre Web_ViewViewController conforme à la UIWebViewDelegate protocole. D'abord, il y a toujours un moment de scintillement de fond blanc jusqu'à ce que le empth HTML chargement de la page. Vous ne savez pas comment se débarrasser de cela. Ci-dessous est un échantillon:

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

1voto

user377808 Points 128

J'ai une solution. Ajouter la vue web après il est chargé.

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X