0

我有一个具有单列的 NSTableView,其中的行包含 WebKit WebView。我遇到的问题是如何获取 WebView 的大小,以便可以在表格视图的heightOfRow:方法中设置高度。

以下是代码的相关部分:

// The only essential/required tableview dataSource method
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return [self.messagesArray count];
}

// This method is optional if you use bindings to provide the data
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

    NSString *identifier = [tableColumn identifier];
    if ([identifier isEqualToString:@"MainCell"]) {

        ChatTableViewCell *cellView = (ChatTableViewCell*)[tableView makeViewWithIdentifier:@"MainCell" owner:self];
        NSString *htmlString = [self.messagesArray objectAtIndex:row];
        [[cellView.webView mainFrame] loadHTMLString:htmlString baseURL:nil];
        [cellView.webView.mainFrame.frameView setAllowsScrolling:NO];

        return cellView;
    }

    return nil;
}

我遇到的问题是如何在这种方法中获得大小。到目前为止,我所做的一切都给了我一个例外。我认为这是因为调用以下方法时单元格没有正确初始化,并且 WebView 方法loadHTMLString是异步的。

-(CGFloat) tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row {
    //What can I put here?
}

我希望能够将单元格调整为与 WebView 中的内容相同的大小。

编辑:我尝试将以下内容添加到heightOfRow方法中:

    WebView *webView = [((ChatTableViewCell*)[tableView viewAtColumn:0 row:row makeIfNecessary:YES]) webView];
    NSRect webViewRect = [webView frame];
    return webViewRect.size.height;

它给了我以下信息:

WARNING: NSTableView detected a rowView was requested from inside of the -heightOfRow delegate method. That is not supported!

4

1 回答 1

1

试试这个,它会给你 webview 内容的高度..

用这样的html字符串加载webview..

embedHTML = [embedHTML stringByAppendingFormat:@"<body><div id='size_div'>%@</div></body></html>",YourString];

现在在 webViewDidFinishLoad 方法中保留此语句...

NSString *output = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"size_div\").offsetHeight;"];  
NSLog(@"height: %@", output);
于 2012-11-27T05:43:25.123 回答