iOS 8中的UIWebView内容大小

iOS 8中的UIWebView内容大小,ios,cocoa-touch,uiwebview,ios8,uikit,Ios,Cocoa Touch,Uiwebview,Ios8,Uikit,我试图在比屏幕小的web视图中显示一些内容。这在iOS 7中有效,但在iOS 8中,web视图似乎会自动将web视图的内容大小设置为屏幕大小。我如何说服UIWebView在iOS 8中使用视图大小作为内容大小 我创建了一个简单的例子来说明这个问题。从Xcode的单视图iPad模板开始,我添加了一个高480px、宽320px的web视图,位于父视图的中心。我将其连接到现有视图控制器中的webView插座。然后,我在-viewDidLoad中添加了一些代码,以便将.mp4视频加载到web视图中。以下

我试图在比屏幕小的web视图中显示一些内容。这在iOS 7中有效,但在iOS 8中,web视图似乎会自动将web视图的内容大小设置为屏幕大小。我如何说服
UIWebView
在iOS 8中使用视图大小作为内容大小

我创建了一个简单的例子来说明这个问题。从Xcode的单视图iPad模板开始,我添加了一个高480px、宽320px的web视图,位于父视图的中心。我将其连接到现有视图控制器中的
webView
插座。然后,我在
-viewDidLoad
中添加了一些代码,以便将.mp4视频加载到web视图中。以下是完整的代码:

@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下,这正是我想要的。结果如下所示:

然而,在iOS 8下,视频被放大和下移;内容大小似乎与屏幕大小相同,内容的原点位于“我的web视图”的原点:

如何在iOS 8中获得iOS 7行为?或者,如何调整web视图内容大小


即使在iOS 7下,
UIWebView
也经常以大于web视图框架的大小显示一些内容(例如HTML页面)。我还想学习如何让web视图缩放此类内容,使其完全在web视图的宽度内绘制,但与将视频内容缩放到视图相比,这是第二个问题。

您可以使用约束和自动布局使web视图填充整个屏幕,在wAny | hAny size类中设置web视图的约束将使其适用于任何设备。

将您的
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];
}
-(void)viewDidLoad{
[超级视图下载];
self.webView.mediaplaybackrequiresseraction=否;
NSString*videoHTML=[NSString stringWithFormat:@“正文{边距: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'> 

与默认版本相比:

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

我们在iOS8中遇到了一个类似的问题,这就解决了它。我还尝试了你的示例代码,它也修复了它

您可以在此处阅读视口内容:


希望这有帮助

我可以根据需要调整web视图本身的大小——我想调整内容的大小。如果您查看上面的两个图像,则每个web视图的大小都相同。内容OTOH与iOS 7图像中的web视图相匹配,但在iOS 8图像中缩放到屏幕大小。我的目标是创建一个比屏幕小的web视图,但要将内容缩放到适合视图的大小。下面是一个示例,在两个iOS版本上,它对我来说都很好。感谢您的努力,但我再次使用了一个故意比全屏小的web视图。删除导致web视图与superview大小匹配的约束,将大小设置为小于superview的大小(例如350x500),然后在iOS 7和iOS 8下再次运行应用程序。当我在你的项目中这样做时,我得到的结果与我在问题中发布的图片类似。是的,我得到的结果与你的类似,对此表示抱歉。听起来这会有很大帮助——我们今天下午正在研究类似的方法。非常感谢!工作得很好。调整视口正是正确的解决方案。谢谢,这真的很有帮助!