我正在为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
谢谢:)
答案 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上,在页面加载时,在页面加载时将标题中的链接删除到空文件...
这将刷新您的浏览器缓存,希望这有帮助!