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

Ios 如何使UIWebView中显示的SVG文件的元素居中?,ios,uiwebview,svg,Ios,Uiwebview,Svg,我在UIWebView中显示了一个SVG文件。此SVG包含许多表示可触摸元素的标记。加载SVG文件后,我想滚动视图,使特定元素位于屏幕中央附近 到目前为止,我得到的是这样的东西: - (void)webViewDidFinishLoad:(UIWebView *)webView { [diagramView stringByEvaluatingJavaScriptFromString:@"" "var e = document.getElementById('myelem

我在
UIWebView
中显示了一个SVG文件。此SVG包含许多表示可触摸元素的
标记。加载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文件的正确
元素(使用
警报(e.id)
检查)。我似乎找不到提供实际偏移量的元素属性的正确组合


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

请参阅
getBBox
,文档记录在
http://www.w3.org/TR/SVG11/types.html#__svg__SVGLocatable__getBBox
(很抱歉,无法作为链接发布,因此存在错误)

一个快速的演示是使用Chrome加载并运行
$('#path3695').getBBox().y

具体来说,您只需使用:

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

据我所知,UIWebView使用URI加载SVG文档。因此,如果添加一个要显示的元素Id的片段标识符,它是否将显示集中在该元素上?加载时,someDrawing.svg是您正在加载的,aId是您希望显示集中在@RobertLongson上的元素的id:我忘了提到我尝试过,但我无法在最后加载带有URL片段的文件资源。此外,即使加载了,它也会将元素滚动到视图的顶部,但我希望元素更多地位于中心(我希望在所选元素的下方和上方看到图表的某些部分)。我也尝试了
e.scrollIntoView()
,但似乎根本不起作用(没有出现滚动,就像问题中的代码一样)。Hi@GregHewgill只是想检查下面的内容是否对您有效