2014-10-31 80 views
4

我试图在小于屏幕的网页视图中显示一些内容。这适用于iOS 7,但在iOS 8中,Web视图似乎自动将Web视图的内容大小设置为屏幕大小。我如何说服UIWebView在iOS 8中使用内容大小的视图大小?iOS中的UIWebView内容大小8

我创建了一个说明问题的最小示例。从Xcode的单视图iPad模板开始,我添加了一个高度为480px,宽为320px的Web视图,以父视图为中心。我将它连接到现有视图控制器中的一个webView插座。然后,我添加了一些代码到-viewDidLoad以将.mp4视频加载到网页视图中。下面是完整的代码:

@interface ViewController() 

@property IBOutlet UIWebView *webView; 

@end 

NSString *const videoURL = @"https://dl.dropboxusercontent.com/u/29161243/Mahalo%2520Surf%2520Eco%2520Festival%25202014%2520-%2520Day%25204-SD.mp4"; 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL *url = [NSURL URLWithString:videoURL]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [self.webView loadRequest:request]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 

@end 

在搭载iOS 7,这不正是我想要的。结果如下所示:

iOS7 correctly displays the content

在iOS 8的,但是,视频放大和向下移动;它看起来像内容的大小是一样的屏幕尺寸,与内容的起源在我的网络视图的由来:

iOS8 enlarges the content

我怎样才能在iOS 8的iOS 7的行为吗?或者,我如何调整网页浏览内容大小?

即使在iOS 7下,UIWebView通常会显示一些内容(例如HTML页面),其大小超过Web视图框架。我还想了解如何获取Web视图来扩展这种内容,以便它完全在Web视图的宽度内绘制,但与将视频内容缩放到视图相比,这是次要问题。

回答

3

更改viewDidLoad方法:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.webView.mediaPlaybackRequiresUserAction = NO; 
    NSString *videoHTML= [NSString stringWithFormat: @"<style type='text/css'>body { margin:0;background-color:black}</style><video width='%f' height='%f' frameborder='0' controls autoplay><source src=\"%@\" type=\"video/mp4\"></video><meta name='viewport' content='width=device-width, initial-scale=1,user-scalable=no,minimum-scale=1.0, maximum-scale=1.0'>", self.webView.frame.size.width, self.webView.frame.size.height,videoURL]; 
    [self.webView loadHTMLString:videoHTML baseURL:nil]; 
} 

虽然有很多在HTML回事,关键是:

<meta name='viewport' content='width=device-width, initial-scale=1,user-scalable=no,minimum-scale=1.0, maximum-scale=1.0'> 

VS默认版本:

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"> 

我们遇到了类似的问题,在iOS8中弹出,并解决了这个问题。我也试过你的示例代码,它也修复了它。

您可以在视口中的东西在这里读了起来:https://developer.apple.com/library/IOS/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html

希望这有助于!

+0

听起来它会有很大帮助 - 我们今天下午正在采取类似的方法。非常感谢! – Caleb 2014-11-04 00:27:45

+0

很乐意提供帮助。让我知道它是如何工作的! :) – mattr 2014-11-04 00:28:26

+1

工作很好。调整视口完全是正确的解决方案。 – Caleb 2014-11-07 16:03:47

0

您可以使用约束和自动布局使网页视图填写整个屏幕,设置网页视图的约束wAny | hAny尺寸课程将使其适用于任何设备。

+0

我没有问题根据需要调整网络视图本身 - 这是我想调整的内容的大小。如果您查看上面的两个图像,则每个网页视图的大小相同。内容OTOH与iOS 7图像中的网页视图相匹配,但在iOS 8图像中缩放为屏幕大小。我的目标是一个比屏幕小的网页视图,但内容会缩放以适合视图。 – Caleb 2014-11-03 15:34:08

+1

这里是[示例项目](https://www.dropbox.com/s/gtszu9umhsyh70t/TestWebViewSize.zip?dl=0),这两个iOS版本对我来说都很好。 – gabbler 2014-11-03 15:37:19

+0

感谢您的努力,但我再一次使用的是有意小于全屏的网页视图。删除导致网页视图与超级视图大小相匹配的约束,将大小设置为小于超级视图的大小(例如350x500),然后在iOS 7和iOS 8下再次运行应用程序。当我在您的项目中执行此操作时,我得到的结果与我在问题中发布的图片类似。 – Caleb 2014-11-03 15:53:35