我不是图形专家,但是我通过使用一些CG代码将背景 View 设置为backgroundView,设法设法制作了一些美观的自定义分组的UITableViewCells。在所有SDK直至3.1.3(可能是3.2 ...我还没有在iPad上测试过)的情况下,它都可以很好地工作,但是我认为较新的SDK引入了一种更改屏幕外缓存图形方式的方法。
第一次渲染时,一切都很棒:绘图很好,拐角也透明。如果我将几个 View Controller 推到导航堆栈上并返回,则 View 中现在会出现黑角:
之前&&之后
(来源:tinygrab.com)
(来源:tinygrab.com)
我有大量的代码most of which is written up here。我已尽力进行调整,查看文档中是否有适用的更改,但是至少经过8个小时之后,我仍然找不到可能导致此问题的原因。我尝试过将所有我认为可以使用的 View 设置为backgroundColor=clearColor
和opaque=NO
,但我还缺少什么?有调试提示吗?
更新:
我在viewDidAppear
中有一些调试代码,可打印所有 subview 的backgroundColor和类描述。
- (void)debugView:(UIView *)view {
DebugLog(@"%@ - %@", view.backgroundColor, [[view class] description]);
for (UIView* child in view.subviews) {
[self debugView:child];
}
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DownloadController.networkQueue setSuspended:NO];
for (TTTableViewCell *cell in [self.tableView visibleCells]) {
[cell debugView:cell];
}
}
通过此代码,我会在第一次加载时检查单元格 View 的backgroundColor设置(正常时),然后在返回后再次检查。有一些区别,但是所有颜色仍设置为清晰。这使我相信问题出在UITableViewCell之下。更新2:
我创建了一个simple sample application来突出问题。
最佳答案
我已经测试了示例应用程序,并且可以重现黑角问题。
经过一些实验,似乎黑角问题与用于渲染表格 View 的图层的缓存有关。单元层的几何形状似乎很重要:
为了摆脱黑角,您可以:
[UIColor groupTableViewBackgroundColor].CGColor
作为填充色;它是一种基于图案的颜色,并且遵循设备方向(是);但是绘画与背景并没有完全对齐(该死)。 CGImage
,将其设置为图层的内容,并将 mask 层分配给单元的图层。不确定性能。 希望能有所帮助。
更新
经过一些失败的尝试后,我放弃了面具的想法,因为它太笨拙了。
我已经重新阅读了单元格层的代码,并找到了一种简单的方法来消除黑角。基本思想是
CAGradientLayer
仅在其渐变颜色清晰的情况下才是完全透明的。通过使用以下display
方法,黑角消失了(在模拟器和设备上):- (void)display {
if (_override) {
self.colors =
[NSArray arrayWithObjects:
(id)[UIColor colorWithRed:colorComponents[0] green:colorComponents[1] blue:colorComponents[2] alpha:colorComponents[3]].CGColor,
(id)[UIColor colorWithRed:colorComponents[4] green:colorComponents[5] blue:colorComponents[6] alpha:colorComponents[7]].CGColor,
nil];
} else {
self.colors =
[NSArray arrayWithObjects:
(id)[UIColor clearColor].CGColor,
(id)[UIColor clearColor].CGColor,
nil];
}
[super display];
}
当然,可以对此进行一些优化:
override
属性提供自定义 setter ,以更改图层的颜色。 display
方法,请删除它。 关于iphone - 仅在导航弹出后,分组的UITableViewCells上才会出现黑角,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2811611/