wake-up-neo.com

Hintergrund für UIWebView in iOS kann nicht geändert werden

Gibt es eine Möglichkeit, die Hintergrundfarbe für UIWebView zu ändern?

Keine der im IB-Effekt eingestellten Farben UIWebView: Bevor der tatsächliche Inhalt geladen wird, erscheint er als weiß (was zu einem weißen Blitz zwischen dem Moment des Ladens und dem Rendern des Inhalts führt).

Die programmgesteuerte Einstellung der Hintergrundfarbe bewirkt ebenfalls nichts. 

Hier ist der 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

Sie können die undurchsichtige Eigenschaft der Webansicht auf NO festlegen und dann die Hintergrundfarbe der Ansicht darunter einstellen.

[webView setOpaque:NO];
180
Kaveh

Probieren Sie es aus. Die UIWebView wird eingeblendet, sobald der Ladevorgang abgeschlossen ist, und der Flash wird nicht angezeigt.

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

Der Animationsblock in webViewDidFinishLoad wird die Ansicht einblenden, sobald er geladen ist. Wenn Sie ihn lieber als Popup anzeigen möchten, entfernen Sie einfach die UIView-Aufrufe.

17
Adolfo

Keine der Antworten hier funktionierte für mich, alle beteiligten waren immer noch eine Art Blitz. Ich habe hier eine funktionierende Antwort gefunden: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (Ich musste die Verzögerung auf einstellen .25, um das Blinken zu vermeiden). Denken Sie daran, das "ausgeblendete" Flag von UIWebView in InterfaceBuilder zu überprüfen.

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

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

Ja, die Einstellung der backgroundColor-Eigenschaft scheint keine Auswirkungen auf die UIWebView zu haben.

Ich habe keine zufriedenstellende Lösung, nur eine Problemumgehung, die Sie berücksichtigen können.

  • Ändern Sie zuerst die Hintergrundfarbe, indem Sie eine anfängliche leere HTML-Seite festlegen
  • Sobald das geladen ist, laden Sie Ihre Haupt-URL (z. B. http://www.Apple.com ).

Wenn Sie nicht auf das Laden der ursprünglichen HTML-Seite warten, wird möglicherweise der ursprüngliche Hintergrund nicht angezeigt, während die Haupt-URL geladen wird. Daher müssen Sie die webViewDidFinishLoad: -Methode von UIWebViewDelegate verwenden. Sie können diese Methode in Ihrer Web_ViewViewController-Klasse implementieren und Ihren Web_ViewViewController an das UIWebViewDelegate-Protokoll anpassen. Zunächst wird noch ein kurzes Flackern des weißen Hintergrunds angezeigt, bis die leere HTML-Seite geladen wird. Nicht sicher, wie ich das loswerden kann. Unten ist ein Beispiel:

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

Ich habe eine Lösung ... _. Fügen Sie die Webansicht hinzu, nachdem sie geladen wurde.

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

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

Das könnte helfen

(Xcode 5 iOS 7) Universal App-Beispiel für iOS 7 und Xcode 5. Es ist ein Open Source-Projekt/Beispiel, das sich hier befindet: Link zu SimpleWebView (Beispiel für Project Zip und Quellcode)

webview.backgroundColor = [UIColor clearColor];

0

In 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

Probieren Sie es aus. Ich habe ein Hintergrundbild "address.png" aus meinen Anwendungsressourcen verwendet. 

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