UITableView приходит в обход при добавлении UILabel с cornerRadius в каждую ячейку

Я добавляю UILabel для каждой ячейки в своем представлении таблицы. Вначале это не представляет проблемы. Когда я оборачиваю углы UILabel с помощью layer.cornerRadius, прокручивая представление таблицы, останавливается.

 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];

Ответ 1

Я пробовал это перед собой и обнаружил, что это бесполезно для любого вида взгляда, который движется. Вы должны создать изображение с закругленными углами и добавить это как фон своего ярлыка.

Ответ 2

Нет необходимости в изображении с разведенными углами - см. ответ fknrdcls на этот вопрос:

UILabel layer cornerRadius отрицательно влияет на производительность

В принципе, вам просто нужно придать ярлыку прозрачный фон и вместо этого добавить на него цвет фона. Затем вы можете отключить 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;

Ответ 3

для UIImageView трюк UILabel не работал, потому что мне пришлось обрезать изображение, а не только цвет фона. самое быстрое решение, которое я нашел, - растеризовать родителя представления всякий раз, когда я его анимировал (у меня есть скользящая панель).