向每个单元格添加带有cornerRadius的UILabel时,UITableView会爬行

时间:2010-02-13 02:59:37

标签: ios uitableview uilabel cornerradius

我正在为表格视图中的每个单元格添加一个UILabel。这最初没有问题。当我使用layer.cornerRadius滚动UILabel的角落时,表视图会停止。

 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(cell.bounds.origin.x+10 ,5, 30, 30)];
 label1.backgroundColor = ([[managedObject valueForKey:@"color"] hasPrefix:@"FFFFFF"]) ? [UIColor blackColor] : color;
 label1.layer.cornerRadius = 10.0f;
 [cell addSubview:label1];

3 个答案:

答案 0 :(得分:15)

不需要带有角落的图像 - 请参阅fknrdcls对此问题的回答:

UILabel layer cornerRadius negatively impacting performance

基本上,您只需要为标签指定透明背景,然后将背景颜色添加到图层中。然后,您可以禁用maskToBounds,这可以大大提高性能。所以你的代码变成了:

UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(cell.bounds.origin.x+10 ,5, 30, 30)];
label1.backgroundColor = [UIColor clearColor];
label1.layer.backgroundColor=[UIColor whiteColor].CGColor;
label1.layer.cornerRadius = 10.0f;
label1.layer.masksToBounds = NO;
label1.layer.shouldRasterize = YES;

答案 1 :(得分:7)

我在自己之前尝试过这一点,并发现它对任何移动的视图都没用。您应该创建一个带圆角的图像,并将其添加为标签的背景。

答案 2 :(得分:0)

对于UIImageView,UILabel技巧不起作用,因为我不得不裁剪图像,而不仅仅是背景颜色。我找到的最快的解决方案是每当我为它设置动画时光栅化视图的父级(我有一个滑动面板)。