Ответ 1
Вы можете установить для непрозрачного свойства веб-просмотра значение NO, а затем установить цвет фона для представления ниже.
[webView setOpaque:NO];
Есть ли способ изменить цвет фона для 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];
}
Вы можете установить для непрозрачного свойства веб-просмотра значение NO, а затем установить цвет фона для представления ниже.
[webView setOpaque:NO];
Попробуйте. Он будет исчезать 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.
Ни один из ответов здесь не работал у меня, все они все еще использовали какую-то вспышку. Я нашел здесь рабочий ответ: http://www.iphonedevsdk.com/forum/iphone-sdk-development/4918-uiwebview-render-speeds-white-background.html (мне нужно было отрегулировать задержку до 0,25, чтобы избежать мигания). Не забудьте проверить флажок "скрытый" UIWebView в InterfaceBuilder.
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self performSelector:@selector(showAboutWebView) withObject:nil afterDelay:.25];
}
- (void)showAboutWebView
{
self.infoWebView.hidden = NO;
}
Да, похоже, что свойство backgroundColor не влияет на UIWebView.
У меня нет удовлетворительного решения, только обходное решение, которое вы можете рассмотреть.
Если вы не дожидаетесь загрузки начальной страницы HTML, вы можете не увидеть исходный фон во время загрузки основного URL-адреса. Поэтому вам нужно будет использовать метод UIWebViewDelegate webViewDidFinishLoad:. Вы можете реализовать этот метод в своем классе Web_ViewViewController и сделать свой Web_ViewViewController совместимым с протоколом UIWebViewDelegate. Вначале все еще мелькает мерцание белого фона до загрузки страницы HTML empth. Не знаете, как избавиться от этого. Ниже приведен пример:
- (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;
}
}
У меня есть решение. Добавьте веб-представление после его загрузки.
-(void)webViewDidFinishLoad: (UIWebView *)pageView {
self.view =pageView;
[pageView release];
}
Попробуйте это. Я использовал фоновое изображение "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];
В 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;
}
Это может помочь
(Xcode 5 iOS 7) Универсальный пример приложения для iOS 7 и Xcode 5. Здесь находится проект/пример с открытым исходным кодом: Ссылка на SimpleWebView (Project Пример Zip и исходного кода)
webview.backgroundColor = [UIColor clearColor];