如何将UIWebView中显示的SVG文件的元素居中?

时间:2012-05-21 10:21:05

标签: ios uiwebview svg

我在UIWebView内显示了一个SVG文件。此SVG包含许多<a>标记,用于指示可触摸元素。加载SVG文件后,我想滚动视图,以便特定元素位于屏幕中心附近。

到目前为止我所拥有的是这样的:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [diagramView stringByEvaluatingJavaScriptFromString:@""
        "var e = document.getElementById('myelement');"
        "var top = e.offsetTop;"
        "while (e.offsetParent) {"
        "    e = e.offsetParent;"
        "    top += e.offsetTop;"
        "}"
        "alert(top);"
        //"scrollTo(0, top);"
    ];
}

但是,只要运行top,它就会变为0。元素e指向SVG文件的正确<a>元素(使用alert(e.id)进行检查)。我似乎无法找到能够给出实际偏移量的元素属性的正确组合。

我可以硬编码一组合适的偏移量,但我真的不想。

1 个答案:

答案 0 :(得分:0)

请参阅getBBox,记录在http://www.w3.org/TR/SVG11/types.html#__svg__SVGLocatable__getBBox(抱歉无法发布链接,SO bug)

快速演示是使用Chrome加载https://upload.wikimedia.org/wikipedia/commons/0/07/Wikipedia_logo_(svg).svg并运行$('#path3695').getBBox().y

具体而言,只需使用:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [diagramView stringByEvaluatingJavaScriptFromString:@""
        "var e = document.getElementById('myelement');"
        "var top = e.getBBox().y;"
        "alert(top);"
        "scrollTo(0, top);"
    ];
}