Я нашел ответ, может быть, кто-то может объяснить это или предложить лучшее решение. Была также дополнительная ошибка, над которой мне пришлось поработать.
- Я убедился, что в uiwebview делегат установлен на владельца файла.
Я изменил родительский вид, когда он выдвинул вид на форму из:
[self.navigationController pushViewController: контроллер анимирован: ДА];
до (важная часть - 320, я ограничиваю изображение портретом):
[self.navigationController pushViewController:controller animated:YES];
controller.webView.hidden = YES;
controller.webView.frame=CGRectMake(0, 0, 320,367);
3.В веб-просмотре я загружаю URL, как всегда:
NSURL *url = [NSURL URLWithString:sUrl];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
4.В webviewdidfinishload у меня теперь есть:
if (self.interfaceOrientation ==
UIInterfaceOrientationLandscapeLeft ||
self.interfaceOrientation ==
UIInterfaceOrientationLandscapeRight) {
self.webView.frame=CGRectMake(0, 0, 480,227);
}
self.webView.hidden = NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
Все это, как правило, решило бы мою проблему, но потом я обнаружил, что URL-адрес gdata, который я получаю от сервиса youtube, фактически разрешается до 2-го URL. Тогда я думаю, что YouTube изменил формат URL, поэтому он пересылается на 3-й URL. Это означает, что мой код didfinishload вызывался до загрузки окончательного URL. Чтобы решить эту проблему, я добавил:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[[NSString stringWithFormat:@"%@",request.URL] substringWithRange:NSMakeRange(0, 26)] isEqualToString:@"http://m.youtube.com/watch"]) {
NSString *sUrl=[NSString stringWithFormat:@"%@",request.URL];
sUrl = [sUrl stringByReplacingOccurrencesOfString:@"http://m.youtube.com/watch?" withString:@"http://m.youtube.com/#/watch?"];
NSURL *url = [NSURL URLWithString:sUrl];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
return NO;
}
//NSLog(@"request:%@",request.URL);
return YES;
}
Что наверняка может быть лучше, но в основном я говорю об этом, чтобы игнорировать 2-й URL и внести свои изменения, чтобы перейти к 3-му URL.