2

这是我做的回购。

https://github.com/lifesaglitch/UIWebViewFlashWhite

基本思想是:

我有一个可扩展的表格视图,有 2 个单元格:标题单元格和内容单元格。

当单击标题单元格时,我插入一个内容单元格,并将一个 html 字符串加载到 Web 视图,这是内容单元格的子视图。

如果这是我第一次展开单元格,则 Web 视图会出现白色闪烁,并且帧大小正确。后续展开可能会有flash,但帧大小不对。

我尝试过(在项目中)将颜色设置为清除,这是行不通的。我还尝试了一个webview的委托,在加载html字符串后设置hidden = NO,但有时不调用委托回调。也许是因为可重用机制。

请从上面的链接下载我的项目并尝试一下。

以下是一些示例代码:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    if (self) {

        self.backgroundColor = [UIColor clearColor];

        self.contentView.backgroundColor = [UIColor clearColor];

    }

    return self;
}

数据源方法:

    ContentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ContentCell"];
    [cell.contentView loadHTMLString:@"<html><body style='background-color: #ff0000'>this is contentasdoifjoiwjeofiqjweoifjqopweifj </body></html>" baseURL:nil];

编辑:

我已经提交了一个新版本:先用占位符隐藏webview,加载后取消隐藏,但还是有白闪屏。

4

1 回答 1

2

首先,您需要像Apple 示例本教程一样将展开/折叠动画修改为 HeaderView

然后,您需要修改 ContentCell.h 和 ContentCell.m 中的代码,不要将 contentView 属性与其他 IBOutlet 挂钩,拖到 tableCell 后的视图将是它的子视图。SupperView 和 Subview 具有相同的名称可能会导致崩溃。选择 cellWebView 名称并与您的 UIWebView 挂钩:

- (void)awakeFromNib{
    self.backgroundColor = [UIColor clearColor];
    [self.contentView setBackgroundColor:[UIColor clearColor]];
    [self.cellWebView setOpaque:NO];//Need to clear background of UIWebView
    self.cellWebView.backgroundColor = [UIColor clearColor];
}
于 2013-06-14T03:05:49.697 回答