Тени и скругления в списках
Вопрос
Скролл ленты дёргается. В ячейках у картинки cornerRadius + masksToBounds, а у карточки тень без shadowPath. Что исправить в первую очередь?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Убрать
cornerRadius: скругления всегда дают offscreen-рендеринг - Перенести создание ячеек в фоновый поток, чтобы разгрузить главный
- Задать
shadowPath, чтобы тень не считалась по содержимому каждый кадрправильный ответ - Увеличить
estimatedRowHeight, чтобы реже пересчитывать высоты
Разбор
Тень без shadowPath заставляет Core Animation вычислять форму по содержимому слоя, это offscreen-проход на каждый кадр. Явный shadowPath (например, из UIBezierPath(roundedRect:cornerRadius:)) убирает эту работу. Простой cornerRadius с masksToBounds на современных iOS обычно оптимизирован, хотя комбинации масок могут стоить дорого. UIKit-объекты нельзя создавать в фоне. Высота строк влияет на прокрутку иначе. Диагностика: Instruments Core Animation и подсветка offscreen-рендеринга в симуляторе.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Методы UIKit и момент вызова
Следующий вопрос
Порядок жизненного цикла UIViewController
Ещё по теме «UIKit»
- Неверная картинка в переиспользуемой ячейке
- Diffable data source и повторяющиеся идентификаторы
- Что делать в prepareForReuse
- reconfigureItems и reloadItems
- Ячейки с автоматической высотой
- Разница между frame и bounds
- Где брать финальный размер view
- Почему кнопка не получает нажатия