,我試圖找到一種方法來調整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確定爲什麼那樣工作,但是......是的。
有沒有找到不觸發文字換行的最小寬度的方法?
我還沒有機會看到,如果這個工程,但我想到了一個主意: 如果通過JavaScript訪問HTML源(或者,如果你不要),你可以將所有內容都包裹在一個內聯div/span標籤中,它應該做收縮包裝。 然後強制webview的佈局到你的maxWidth。 在這一點上,div元素的大小應該與您正在查找的大小相匹配。你應該能夠使用javascript找到div元素的大小。 當我有機會嘗試這個結果時,我會回覆結果。 – psilencer