2013-08-18 77 views
2

,我試圖找到一種方法來調整UIWebView的寬度以匹配其內容的寬度,直到某個最大寬度。我也想讓它與高度相匹配,但假設我們可以找到合適的寬度,高度問題可以通過許多其他堆棧溢出帖子來解決。如標題所示,動態設置webview寬度以匹配內容寬度(和高度)

舉個例子:

如果輸入到網頁視圖是一個頁面,說:Hello World,我想大小web視圖,以便恰好符合Hello world。如果頁面爲Hello,<br/>Stack Overflow,則應將Web視圖設置爲足夠寬以便在一行上適合Stack Overflow。如果有一些非常長的輸入,則應該將webview設置爲某個給定的最大寬度,並在適當的位置允許換行或側滾。這應該理想地適應不同大小的字體和圖像以及(但可以忽略其他html元素)

我已經嘗試了許多人用於動態設置webview高度的內容高度的不同技術,但沒有一個以我想要的寬度工作。下面是一些例子:

使用的UIWebView的scrollView.contentSize屬性:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    webView.frame = CGRectMake(0, 0, [self maxWebViewWidth], 1); // force layout at max Width 
    CGFloat width = MIN(webView.scrollView.contentSize.width,[self maxWebViewWidth]); // the width we want to use 

    webView.frame = CGRectMake(0, 0, width, 1); // force layout at our width 
    CGFloat height = webView.scrollView.contentSize.height; //the height we want to use 

    webView.frame = CGRectMake(0, 0, width, height); 
} 

與上述例子中的問題是,當我計算寬度,webView.scrollView.contentSize.width總是返回maxWebViewWidth或更大,從來沒有少,即使輸入很短,如「你好」

如果我們改變

webView.frame = CGRectMake(0, 0, [self maxWebViewWidth], 1); // force layout at max Width 

webView.frame = CGRectMake(0, 0, 1, 1); // force layout at some small width 

它得到了最廣泛的字符相匹配的寬度,你會得到這樣的結果:

H 
e 
l 
l 
o 

我使用sizeThatFits取得了類似的結果,並訪問了高度的JavaScript的方法和寬度。

我懷疑上述結果的原因是,webivew的內容寬度實際上會跨越webview的整個寬度,即使它不需要適合所有內容(想象左右兩種情況對齊的文本 - 所以內容寬度必須至少跨越整個webview寬度)。

的另一種嘗試,其產生不同的結果:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    webview.frame = CGRectMake(0,0,1,1); 
    [webView sizeToFit]; 
} 

裏面居然大小web視圖寬度相匹配的最長的單詞:

隨着輸入:hello there thisisalongword lol this isnt working

我們得到如下結果:

hello there 
thisisalongword 
lol this isnt 
working 

我不是qui確定爲什麼那樣工作,但是......是的。

有沒有找到不觸發文字換行的最小寬度的方法?

+0

我還沒有機會看到,如果這個工程,但我想到了一個主意: 如果通過JavaScript訪問HTML源(或者,如果你不要),你可以將所有內容都包裹在一個內聯div/span標籤中,它應該做收縮包裝。 然後強制webview的佈局到你的maxWidth。 在這一點上,div元素的大小應該與您正在查找的大小相匹配。你應該能夠使用javascript找到div元素的大小。 當我有機會嘗試這個結果時,我會回覆結果。 – psilencer

回答

0

試試這個代碼

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    int content_height = [[_textWebview stringByEvaluatingJavaScriptFromString: @"document.body.offsetHeight"] integerValue]; 
    CGRect rect = _textWebview.frame; 
    rect.size.height = content_height+15; 
    _textWebview.frame = rect; 
} 
相關問題