从横向缩略图开始的uiwebview youtube会在旋转时调整大小

时间:2011-04-06 13:53:52

标签: iphone objective-c uiwebview

我有一个带有tableview的导航控制器。当您单击其中一个单元格时,它会在其上显示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.获取缩略图以在方向更改时调整大小/重新加载 要么 B.获取缩略图以加载它将以纵向模式加载的尺寸,即使它是以横向方式启动的。

2 个答案:

答案 0 :(得分:0)

您应该在UIViewController类中重写此方法并在那里调整大小:

  • (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration;

答案 1 :(得分:0)

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

  1. 我确保uiwebview将委托设置为文件所有者。
  2. 我将视图从以下位置推送到表单时更改了父视图:

    [self.navigationController pushViewController:controller animated:YES];

  3. to(重要的部分是320,我将视图限制为肖像):

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

    3.在webview上我像往常一样加载网址:

    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;
    

    这一切通常都解决了我的问题,但后来我发现我从youtube服务获得的gdata网址实际上已经解析为第二个网址。然后我猜youtube改变了他们的url格式,所以它被转发到第3个网址。这意味着我在最终url加载之前调用了didfinishload代码。为了解决这个问题,我补充说:

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

    我肯定会更好,但基本上我告诉它忽略第二个网址,并自行更改以转到第三个网址。