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

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 слой 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;
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