0

我正在使用 HTML 在我的应用程序中呈现一些离线数据。我会为不同的屏幕布局、iPhone、iPad 使用相同的 HTML 源代码——横向和纵向。这意味着我为添加内容而设计的 HTML 表格必须相应地拉伸和收缩。

我有一些内容(文本和图片)可以通过将其提供给 HTML 来呈现。但我也有一些复杂的内容,比如 MapView 和一些无法在 HTML 中处理的自定义。因此,我计划将 MapView 添加为 UIWebView 上的子视图,恰好位于<td>分配 for 地图的位置。通过这样做,我想我可以在 webView 的框架发生任何变化时更改子视图的位置。

所以,我需要一种机制来让我知道<td>负责显示 mapView 的空框架。

表格的 HTML 提取示例:

<table width="100%" border="1" cellpadding="5">
<tr>
<td width = "100%">
This table data though assigned to width 100% would occupy maximum space which is left after assigning space for all table data columns of this row!
</td>
<td width = "80" height = "80">
This table data column is fixed with width and height of 80 pixels. This would be irrespective of the screen size but 80 px width and height would be assigned to this table data. We can use this fixed space for adding a MapView as subview if we get its frame with respect to UIWebView.
</tr>
</table>

我在这里的问题很简单,如何获得<td>相对于 UIWebView 的第二帧,以便我可以将 MapView 添加为完全相同的位置的子视图,并在 UIWebView 的帧发生变化时调整子视图的位置。

编辑: 刚刚对接受答案的 Java 脚本进行了小改动,以获得整个元素框架:

function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    var _height = 0;
    var _width = 0;
    _height += el.offsetHeight;
    _width += el.offsetWidth;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ))
    {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x , width: _width, height:_height};
}

然后在我的 WebView 委托中:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *x = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('MapViewLoc')).left"];
    NSString *y = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('MapViewLoc')).top"];
    NSString *width = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('MapViewLoc')).width"];
    NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('MapViewLoc')).height"];


    NSLog(@"X Y co-ordinates (%@, %@) & [%@, %@]", x, y, width, height);
}
4

1 回答 1

1

您可以将此 javascript 代码添加到您的 HTML 页面:

function getOffset( el ) {
    var _x = 0;
    var _y = 0;
    while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
        _x += el.offsetLeft - el.scrollLeft;
        _y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
    }
    return { top: _y, left: _x };
}

然后在你的代码中你可以这样做:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
   string x = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('td[1]') ).left"];
   string y = [webView stringByEvaluatingJavaScriptFromString:@"getOffset( document.getElementById('td[1]') ).top"];
}
于 2013-04-29T10:33:04.727 回答