【问题标题】:UIWebView breaking constraint when playing a video in fullscreen (Xcode 6)在全屏播放视频时 UIWebView 打破约束(Xcode 6)
【发布时间】:2014-11-28 10:59:16
【问题描述】:

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

但是,在使用 Xcode 6 的 iOS 8 中,每次播放 Youtube 视频并全屏播放时,我的 UIWebView 约束都会中断,并且 UIWebView 会重新定位到我的控制器中(通常在屏幕上向上移动 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

谢谢你:)

【问题讨论】:

  • 我也面临同样的问题。你解决了吗?
  • 这里也一样。有什么消息吗?

标签: objective-c uiwebview youtube ios8 xcode6


【解决方案1】:

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

我测试过的仍然无法工作: - 删除所有 webview 及其子视图的约束并将 TranslatesAutoresizingMaskIntoConstraints 设置为 YES - 用 WKWebview 交换 UIWebview,更新更快的 UIWebview

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

【讨论】:

    【解决方案2】:

    这样试试

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

    【讨论】:

    • 仍然打破约束:(
    【解决方案3】:

    我要下班了,所以我得赶紧输入这个答案,

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

    &lt;link id="refreshCache" rel="stylesheet" type="text/css" href="refresh.css"&gt;

    创建一个 refresh.css 文件也很重要,但是您可以大声地将其留空,

    现在使用 javascript 或 jQuery,如果您已经将其链接起来,请使用

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

    在 id refreshCache 上,在页面加载时,在页面加载时移除 header 中指向空文件的链接...

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

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多