我有一个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?
}
我希望能够将单元格的大小调整为 与 Web 视图中的内容相同的大小。
编辑:我尝试将以下内容添加到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!
试试这个,它将为您提供Web视图内容的高度。
使用这样的 html 字符串加载 Web 视图。
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);