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

Я добавляю 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];

person yesimarobot    schedule 13.02.2010    source источник
comment
Вы можете посмотреть, как это делает Tweetie (плавно прокручивается).   -  person icktoofay    schedule 13.02.2010


Ответы (3)


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

person nevan king    schedule 13.02.2010
comment
это не очень хорошее решение, потому что на этикетках разного размера изображение будет растянуто, и радиус угла, заданный изображением, будет отличаться от других. - person Silviu St; 30.07.2014

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

Слой UILabel angleRadius отрицательно влияет на производительность

По сути, вам просто нужно придать этикетке прозрачный фон и вместо этого добавить фоновый цвет к слою. Затем вы можете отключить 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;
person ChristophK    schedule 20.09.2011
comment
+1 Мне очень нравится это решение, но мне нужно закруглить только некоторые углы. Мой обходной путь: чтобы «показать» только правый верхний и нижний углы, я добавляю подпредставление с отрицательным значением в его frame.origin.x и назначаю cornerRadius его layer. Если кто-то нашел лучшее решение для этой потребности, мне интересно. - person anneblue; 04.03.2014

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

person Michael Rose    schedule 27.02.2013