Не могу изменить фон для UIWebView в iOS - PullRequest
58 голосов
/ 10 октября 2009

Есть ли способ изменить цвет фона для 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];
}

Ответы [ 8 ]

180 голосов
/ 12 марта 2010

Вы можете установить для непрозрачного свойства веб-просмотра значение NO, а затем установить цвет фона для представления ниже.

[webView setOpaque:NO];
17 голосов
/ 12 октября 2009

Дайте это попробовать. После завершения загрузки он исчезнет из 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.

7 голосов
/ 10 мая 2010

Ни один из ответов здесь не работал для меня, все они включали в себя какую-то вспышку. Я нашел рабочий ответ здесь: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (мне пришлось отрегулировать задержку до .25, чтобы избежать мигания). Не забудьте проверить «скрытый» флаг UIWebView в InterfaceBuilder.

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

- (void)showAboutWebView 
{
    self.infoWebView.hidden = NO;
}
1 голос
/ 16 января 2011

У меня есть решение. Добавьте веб-представление после загрузки.

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

    self.view =pageView;
    [pageView release];
}
1 голос
/ 10 октября 2009

Да, кажется, установка свойства backgroundColor не влияет на UIWebView.

У меня нет удовлетворительного решения, только обходной путь, который вы можете рассмотреть.

  • Сначала измените цвет фона, установив исходную пустую страницу HTML
  • После загрузки вы загружаете свой основной URL (например, http://www.apple.com)

Если вы не ждете загрузки начальной HTML-страницы, вы можете не увидеть исходный фон во время загрузки основного URL-адреса. Поэтому вам нужно использовать метод webViewDidFinishLoad: UIWebViewDelegate :. Вы можете реализовать этот метод в своем классе 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;
    }
}
0 голосов
/ 21 января 2014

Это может помочь

(Xcode 5 iOS 7) Пример универсального приложения для iOS 7 и Xcode 5. Здесь находится проект / пример с открытым исходным кодом: Ссылка на SimpleWebView (Пример Zip и исходного кода проекта)

webview.backgroundColor = [UIColor clearColor];

0 голосов
/ 27 августа 2013

В 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 голосов
/ 14 апреля 2010

Попробуйте это. Я использовал фоновое изображение "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];
...