我想在iOS的UIWebView中顯示SVG圖形。但是,使用網絡視圖的圖像會在圖形的上方和下方添加大量的空白區域,像素爲100像素。通向屏幕垂直一半的圖像,您必須滾動才能將其完全放入視圖中。在使用視圖框時在UIWebView中顯示SVG圖形時出現垂直間距問題
我在這個問題上搜索了很高和低,並嘗試了很多很多東西。我已經有了一個「足夠好」的解決方法,我將在此分享。我問這個問題,以防萬一誰有更好的解決辦法,並幫助遇到同樣問題的其他人。
我使用的真實圖像是由另一種工具生成的樂譜(lilypond後處理的inkscape)。然而,這個簡單的矩形是其高度的兩倍,顯示了完全相同的問題。
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 20 10" width="100%" height="100%">
<rect height="10" style="fill:currentColor" width="20" x="0" y="0" />
</svg>
如果您查看在Safari或Chrome然後顯示完全,填充所述窗口並在頂部開始。但在UIWebView中,它擁有大量的空白空間。如果刪除viewBox屬性,那麼隨機多餘的空白區域會消失,但這並不有用,因爲圖形很小。無論如何,SVG是正確的。在webViewDidFinishLoad
中調用[webView sizeThatFits:CGSizeZero]
將返回1024x1120。不是我期望的1024x512
在我的情況下,我得到的UIWebView顯示原始SVG。以下是我嘗試過的沒有效果的事情。
- 結束語在HTML
的SVG結束語HTML中的SVG並添加以下CSS:
* { margin: 0; padding: 0; } body { overflow: hidden; }
把下面的代碼在
webViewDidFinishLoading
,我得到了別的地方在計算器上。- (void)webViewDidFinishLoad:(UIWebView *)webView { CGRect frame = webView.frame; frame.size.height = 1; webView.frame = frame; CGSize fittingSize = [webView sizeThatFits:CGSizeZero]; frame.size = fittingSize; webView.frame = frame; }
的部分解決方法是添加屬性preserveAspectRatio="xMinYMin meet"
在SVG標籤。
<svg xmlns="http://www.w3.org/2000/svg" version="1.2"
preserveAspectRatio="xMinYMin meet" viewBox="0 0 20 10" width="100%" height="100%">
<rect height="10" style="fill:currentColor" width="20" x="0" y="0" />
</svg>
刪除圖像頂部的多餘空白,但將其留在底部。這只是一個部分的解決方法,就像它最初看起來是正確的,你仍然可以滾動,當你不應該能夠。因此,我仍然需要禁用滾動以保持它看起來正確。
有什麼想法?
嗨克里斯,感謝您花時間看看這個。正如你所說的'見面'和'切片'做不同的事情,適合vs填充。該視口是一個不錯的主意,我試圖用它來縮放圖像,以替代SVG中的viewBox。我現在沒有使用它,但我會保留它作爲一個選項。除此之外,我無法看到將SVG直接放入UIWebView並使用您所描述的選項和方法將其封裝在HTML中之間的行爲差異。然而,我真正的問題是由於我將在下面發佈的一個搞砸了。 –