2014-10-31 120 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