我有一个具有单列的 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!