Непрозрачный UILabel в UICollectionViewCell имеет странное поведение рендеринга

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

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

У меня есть UICollectionView, который имеет несколько ячеек и поддерживает горизонтальную прокрутку. В ячейках у меня есть метка, которую я устанавливаю на - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath и очищаю на - (void)prepareForReuse.

Кажется вполне нормальным, и у меня даже есть точно такая же реализация, которая работает без каких-либо странностей.

Теперь, по соображениям производительности, я включил непрозрачность UILabel в Interface Builder. Когда я прокручиваю пару раз, я вижу это:

странное поведение рендеринга

Всякий раз, когда я выключал непрозрачность в Interface Builder, я вижу это: введите здесь описание изображения

У меня большой опыт работы с UITableViews и UICollectionViews (и с повторным использованием и т. д.), но я никак не могу правильно объяснить это поведение...


person Jake    schedule 11.04.2013    source источник
comment
кажется, что вы укладываете две этикетки.   -  person Jonathan Cichon    schedule 11.04.2013
comment
@JonathanCichon как? Я поместил метку через IB и повторно использовал ее (как описано). Даже если бы я стекировал, как это может быть вызвано включением / выключением непрозрачности (я даже подозревал бы, что это было бы наоборот, если бы это было так).   -  person Jake    schedule 11.04.2013
comment
если вы используете непрозрачный (не альфа-канал), не гарантируется, что контекст метки будет очищен перед перерисовкой. Таким образом, вы можете увидеть предыдущий текст за новым текстом. Opague имеет смысл только с настраиваемыми реализациями drawRect, которые используют преимущества старого контекста или в любом случае заполняют весь экран.   -  person Jonathan Cichon    schedule 12.04.2013
comment
Я все еще не уверен на 100% (источники?), но я приму это.   -  person Jake    schedule 15.04.2013
comment
из документации Apple: Предполагается, что непрозрачное представление заполнит свои границы полностью непрозрачным содержимым, т. е. содержимое должно иметь альфа-значение 1,0. Если представление непрозрачно и либо не заполняет свои границы, либо содержит полностью или частично прозрачный контент, результаты непредсказуемы.   -  person Jonathan Cichon    schedule 15.04.2013
comment
спасибо за цитату, так как я никогда не сталкивался с этим раньше; как это относится к непрозрачному UILabel? (он непрозрачен, заполняет свои границы и не содержит (?) прозрачного содержимого)   -  person Jake    schedule 15.04.2013


Ответы (1)


yourLabel.backgroundColor = UIColor.whiteColor()

Цвет фона UILabel по умолчанию — чистый цвет. Если вы установите непрозрачную метку, вам также необходимо установить непрозрачный цвет фона.

person Jonny    schedule 19.03.2016