我有一个包含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];
}
}