如何在tableview单元格中获得正确的视图高度

时间:2016-11-08 06:28:07

标签: ios objective-c uitableview

我有一个包含UIWebView的自定义tableview单元格。 UIWebView内容很大,所以我可以轻松扩展单元格。当单元格折叠时,我正在淡化单元格底部以显示内容被截断。

要确定是否应淡化单元格内容,我将比较单元格的高度与layoutSubviews()中webview内容的高度。

这是第一次显示单元格时的效果。

当我点击以展开淡出时,删除。好到目前为止。

现在当我折叠单元格时,webview的layoutSubviews()中报告的高度会正确返回一次,但紧接着是第二次调用layoutSubviews(),它会将webview的高度报告为与折叠的细胞。此停止会导致刚刚添加的单元格淡入淡出。

我使用视图调试器检查了单元格,并报告了webview的正确高度。

如何可靠地获取webview的高度?

以下是自定义单元格中的代码:

- (void)layoutSubviews
{
[super layoutSubviews];

if (gradientLayer != nil) {
    [gradientLayer removeFromSuperlayer];
    gradientLayer = nil;
}

// if cell height is less than web view height we must fade
if (self.frame.size.height < self.webView.bounds.size.height) {
    gradientLayer = [CAGradientLayer layer];

    NSObject* fadeColor = (NSObject*)[UIColor colorWithWhite:1.0 alpha:.9].CGColor;
    NSObject* transparentColor = (NSObject*)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor;

    gradientLayer.colors = [NSArray arrayWithObjects:transparentColor, fadeColor, nil];
    gradientLayer.locations = [NSArray arrayWithObjects:
                           [NSNumber numberWithFloat:0.5],
                           [NSNumber numberWithFloat:1.0], nil];

    gradientLayer.bounds = self.bounds;
    gradientLayer.anchorPoint = CGPointZero;

    [self.layer addSublayer:gradientLayer];
  }
}

0 个答案:

没有答案