全屏播放视频时UIWebView破坏约束(Xcode 6)

时间:2014-10-03 11:19:03

标签: objective-c uiwebview youtube ios8 xcode6

我正在为YouTube频道更新iOS应用。在之前的版本(使用Xcode 5的iOS 7)中,我曾经在UIWebView中嵌入了youtube iFrame,一切都会正常工作。

然而,在使用Xcode 6的iOS 8中,每当我播放Youtube视频并且全屏显示时,我的UIWebView约束中断,UIWebView在我的Controller中重新定位(通常在屏幕上向上10点)。

我试图改变约束,但似乎无论我设置什么约束,当玩家全屏播放时它最终都会破坏。

以下是用于嵌入YouTube iframe的html代码:

- (void)embedYouTube:(NSString *)urlString
{
NSString *embedHTML =[NSString stringWithFormat:@"\
                      <html><head>\
                      <style type=\"text/css\">\
                      body {\
                      background-color: transparent;\
                      color: blue;\
                      }\
                      </style>\
                      </head><body style=\"margin:0\">\
                      <iframe height=\"140\" width=\"325\"      src=\"http://www.youtube.com/embed/%@\"></iframe>\
                      </body></html>",urlString];
[self.webView loadHTMLString:embedHTML baseURL:nil];

}

由于日志很大,我已将其粘贴到pastebin中:http://pastebin.com/z4zyq7Hs

谢谢:)

3 个答案:

答案 0 :(得分:1)

我有同样的问题。但是,我没有遇到重定位问题(使用Xcode 6.1),只有一堆约束破坏日志。

我测试的内容仍然无效: - 删除所有webview及其子视图的约束和setTranslatesAutoresizingMaskIntoConstraints为YES - 将UIWebview与WKWebview交换,这是一种更新,更快的UIWebview

我也测试了Dailymotion视频,它也有同样的问题,所以我怀疑这是UIWebview的MediaPlayer视图上的问题。

答案 1 :(得分:0)

试试这个

- (void)embedYouTube:(NSString*)url frame:(CGRect)frame {  
     NSString* embedHTML = @"\ 
        <html><head>\ 
     <style type=\"text/css\">\ 
     body {\ 
     background-color: transparent;\ 
     color: white;\ 
     }\ 
     </style>\ 
     </head><body style=\"margin:0\">\ 
        <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
     width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
        </body></html>";  
     NSString* html = [NSString stringWithFormat:embedHTML, url, frame.size.width, frame.size.height];  
     if(videoView == nil) {  
       videoView = [[UIWebView alloc] initWithFrame:frame];  
       [self.view addSubview:videoView];  
     }  
     [videoView loadHTMLString:html baseURL:nil];  
    }  

答案 2 :(得分:0)

我即将离开工作,所以我必须快速输入这个答案,

我发现修复此问题的一种方法是刷新正在查看的页面的缓存,我没有一个可靠的解决方案,但我上周想出了一个临时的,这可以通过创建一个链接来完成到你的html标题中的css文件

<link id="refreshCache" rel="stylesheet" type="text/css" href="refresh.css">

重要的是你还要创建一个refresh.css文件,然而你却大声将它留空,

现在使用javascript或jQuery如果你已将它链接起来,请使用

.remove http://api.jquery.com/remove/

在id refreshCache上,在页面加载时,在页面加载时将标题中的链接删除到空文件...

这将刷新您的浏览器缓存,希望这有帮助!