use*_*595 4 iphone objective-c uiwebview uitableview ios
我把UIWebView对象变成了倍数UITableViewCell.每个webView都有不同的大小.最初,所有细胞都是相同的高度.用户触摸单元格后,会展开以显示所有webView内容.
我正在使用- (void) webViewDidFinishLoad:(UIWebView *)aWebView动态获取webView高度,并- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath调整单元格的大小.但是,webViewDidFinishLoad仅在调整大小方法后调用,因此,使用旧值为webView高度进行调整大小.
我试图以所需的顺序手动调用这两种方法,但它确实有效(我认为我根本不应该这样做,无论如何......).
这是我将Web视图加载到每个单元格的代码:
[self.webView setUserInteractionEnabled:NO];
[self.webView loadHTMLString:finalString baseURL:nil];
[cell addSubview:self.webView];
cell.accessoryView = accessoryLabel;
cell.textLabel.text = nil;
self.selectedRowIndex = indexPath.row;
[tableView beginUpdates];
[tableView endUpdates];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
Run Code Online (Sandbox Code Playgroud)
要动态获取单元格大小:
- (void) webViewDidFinishLoad:(UIWebView *)aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;
self.cellSize = fittingSize.height;
NSLog(@"Calling webViewDidFinishLoad. Cell size value: %lf", self.cellSize);
}
Run Code Online (Sandbox Code Playgroud)
要更改单元格大小:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath {
if(indexPath.row == self.selectedRowIndex) {
NSLog(@"Resizing cell with size: %lf", self.cellSize);
return self.cellSize + 10;
}
return 44;
}
Run Code Online (Sandbox Code Playgroud)
以下是输出的外观:
2015-02-24 22:59:08.902 testProject[62200:2703641] Resizing cell with size: 0.000000
2015-02-24 22:59:09.064 testProject[62200:2703641] Calling webViewDidFinishLoad. Cell size value: 501.000000
Run Code Online (Sandbox Code Playgroud)
有没有办法只webViewDidFinishLoad在执行后调整单元格大小?
我非常感谢任何帮助!!
我仍然不知道为什么会这样,但我使用以下方法解决了它:
我移动[tableView beginUpdates]并[tableView endUpdates]指示webViewDidFinishLoad方法.这样,无论何时webViewDidFinishLoad执行,它都会正确更新单元格大小.虽然我不认为这是最好的解决方案,但它确实有效.
现在,我的webViewDidFinishLoad方法看起来像这样:
- (void) webViewDidFinishLoad:(UIWebView *)aWebView {
CGRect frame = aWebView.frame;
frame.size.height = 1;
aWebView.frame = frame;
CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
frame.size = fittingSize;
aWebView.frame = frame;
self.cellSize = fittingSize.height;
[self.tableView beginUpdates];
[self.tableView endUpdates];
NSLog(@"Calling webViewDidFinishLoad. Cell size value: %lf", self.cellSize);
}
Run Code Online (Sandbox Code Playgroud)
也许答案可以帮助其他有类似问题的人.
| 归档时间: |
|
| 查看次数: |
10267 次 |
| 最近记录: |