iOS の UIWebView で SVG グラフィックを表示しようとしています。ただし、私が使用している画像では、Web ビューはグラフィックの上下に大量の空白、数百ピクセルを追加しています。画像が垂直方向に画面の半分になるため、完全に表示するにはスクロールする必要があります。
私はこの問題について高低を検索し、多くのことを試しました。ここで共有する「十分な」回避策があります。誰かがより良い修正を行い、同じ問題に遭遇した他の誰かを助けるために、この質問をしています。
私が使用している実際の画像は、別のツール (inkscape によって後処理された lilypond) によって生成された楽譜です。ただし、幅が高さの 2 倍であるこの単純な長方形は、まったく同じ問題を示しています。
<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は正しいです。呼び出す[webView sizeThatFits:CGSizeZero]
とwebViewDidFinishLoad
1024x1120 が返されます。私が期待する1024x512ではありません
私の場合、生の SVG を表示するために UIWebView を取得します。以下は、私が試した効果のないものです。
- SVG を HTML でラップする
SVG を HTML でラップし、次の CSS を追加します。
* { margin: 0; padding: 0; } body { overflow: hidden; }
webViewDidFinishLoading
StackOverflow の別の場所で取得した次のコードを に入れます。- (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>
これにより、画像の上部にある余分な空白が削除されますが、下部には残ります。これは部分的な回避策であり、最初は正しく表示されているように見えますが、スクロールできない場合でもスクロールできます。したがって、スクロールを無効にして正しく表示する必要があります。
何かご意見は?