2011-04-06 38 views
0

我有导航控制器与tableview。当你点击其中一个单元格时,它会在uiwebview上按下一个视图。你被带到一个YouTube页面。uiwebview youtube开始在风景缩略图不会调整轮换大小

当您在纵向的桌面视图中单击一个单元格时,您会看到纵向显示的youtube页面。更改您的方向视频缩略图不会刷新。所以缩略图更小。这可以。我其实更喜欢它更小。所有消耗2行的内容将消耗1行。换言之,其他一切都会根据新的尺寸进行调整。

当你在风景中开始时,问题就出现了。由于缩略图无法调整方向更改的大小,因此更改为纵向模式时,图像会从屏幕上消失,而其余内容则会正确调整。

[webVIew refresh]; 

确实有效,但它显然会重新载入整个页面。因此,根据连接情况,会出现闪烁,或者网站可能会变成白色,直到完成加载(连接速度较慢)。

我也尝试在iframe中加载网站。昨天我问了一个类似的问题,这是针对我创建的本地网页。该问题的答案是将<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'>置于首位。所以我试图用iframe去获取页面。这似乎是一个愚蠢的黑客开始,但我愿意去那里。它甚至不会加载页面。我猜是因为我正在加载重定向到其他页面的YouTube网页。经过进一步的研究,似乎iframe中还存在其他问题,例如滚动。

所以我的问题是我如何能: A.得到的只是缩略图调整大小与方向变化 OR B. /重装获取缩略图的尺寸来加载它会加载在纵向模式下所有的时间,甚至如果它是在风景中开始的。

回答

0

我找到了答案,也许有人可以解释它或提供更好的解决方案。还有一个额外的错误,我必须制定出来。

  1. 我确保uiwebview将委托设置为文件所有者。
  2. 我改变父视图,当它被推视图到窗体上从:

    [self.navigationController pushViewController:控制器动画:YES];

到(重要的部分是320,我妨碍视线肖像):

[self.navigationController pushViewController:controller animated:YES]; 
controller.webView.hidden = YES; 
controller.webView.frame=CGRectMake(0, 0, 320,367); 

3.On web视图我加载的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; 

所有这通常已经解决了我的问题,但后来我发现了GDATA网址我从YouTube服务让我真正得到解决的第二个网址。然后我猜youtube改变了他们的网址格式,所以它被转发到第三个网址。这意味着我的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; 
} 

这我确定会更好,但基本上我告诉它忽略了第二个网址,并让我自己改变去第三URL。

0

你应该在你的UIViewController类中重写此方法,并在那里做调整大小:

  • (无效)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation时间:(NSTimeInterval)持续时间;
相关问题