目前我在自定义的uitableview单元格中加载了网页浏览量。问题是Web视图具有可变大小。在webViewDidFinishLoad中,我能够根据html文档的实际大小设置Web视图的大小。我的问题是在Web视图完成加载之前已经将其高度设置在heightForRowAtIndexPath中的表格单元格。如何在表格单元格已加载后更改它的高度?
理想情况下,我觉得我应该可以像这样使用一些代码。
cellW.frame = cellW.cellWebView.frame;
但是我似乎无法访问heightForRowAtIndexPath中的单元格信息。我觉得我已经很好地解释了这种情况,但是你认为我应该发布的任何代码都可以放在这里。我已经尝试了很多东西(所以在这里有评论和失败的尝试),但主要问题是我似乎无法访问正确位置的单元格信息,如heightForRowAtIndexPath。如果我甚至可以在webViewDidFinishLoad中以某种方式设置单元格信息,我可以简单地设置单元格的框架,我也在设置Web视图的框架大小。
下面是我的表格单元子类的设置。
#import <UIKit/UIKit.h>
#import "DefinitionsAndConstants.h"
@interface UITableViewCellWebView : UITableViewCell
{
UIWebView *cellWebView;
}
@property (nonatomic,retain) UIWebView *cellWebView;
@end
这是我上次尝试使用部分Gavin代码的尝试。但是当然没有办法设置表单元格,因为cellForRowAtIndexPath是不可分配的。
-(void)webViewDidFinishLoad:(UIWebView *)webViews {
[webViews stringByEvaluatingJavaScriptFromString:@"twitterfy()"];
[webViews stringByEvaluatingJavaScriptFromString:@"document.getElementById('tweettext').innerHTML=tweet"];
NSString* h = [webViews stringByEvaluatingJavaScriptFromString:@"getDocHeightMax()"];
int height = [h intValue];
webViews.frame = CGRectMake(0.0f, 0.0f, 320.0f, height);
NSString* i = [webViews stringByEvaluatingJavaScriptFromString:@"return indexPath"];
int ii = [i intValue];
NSIndexPath* ip = [NSIndexPath indexPathForRow:ii inSection:0];
UITableViewCellWebView *tableCell = (UITableViewCellWebView *)[self.tableView cellForRowAtIndexPath:ip];
if (tableCell) {
tableCell.frame = webViews.frame;
}
NSLog(@"Got height from webview %d", height);
}
答案 0 :(得分:1)
我会设置一个可变数组来读取高度。在viewDidLoad
中,你必须分配一些起始值(可能只是一堆@"44.0"
,它并不重要,它还不会用到很多)。在heightForRowAtIndexPath:
中,只需返回该数组中的数字即可。然后在webViewDidFinishLoad
中,将数组中的高度替换为该单元格实际需要的高度(我相信您发布的代码中为NSString *h
),并在桌面上调用reloadData
视图。 reloadData
将会点击heightForRowAtIndexPath:
,它将查看高度数组,该数组现在具有该单元格所需的实际高度,因此一切都应该是闪亮的。
答案 1 :(得分:0)
你应该可以为你的heightForRowAtIndexPath方法做这样的事情:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyTableViewCell *tableCell = (MyTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
if (tableCell) {
return tableCell.cellWebView.frame.size.height;
}
return 44;
}
这样,如果表格单元格可见,它将根据嵌入的Web视图的高度设置高度,否则它将使用默认高度。为了使表格视图刷新单元格的高度,您必须在Web视图大小正确后调用以下内容:
[self.tableView beginUpdates];
[self.tableView endUpdates];
这不会让它重新加载细胞,这可能会为你搞砸,它只会让它再次检查高度,细胞高度将动画到新的高度。