Комментарии 3
Спасибо за публикацию! У меня вопросы по поводу этой строчки:
Обязательно ли вызывать
Обязательно ли через
$0.copy() as? ParallaxLayoutAttributes
Обязательно ли вызывать
copy()
и что будет если не вызвать?Обязательно ли через
as?
пытаться преобразовать к ParallaxLayoutAttributes
?0
По поводу каста в ParallaxLayoutAttributes
— я делаю так, чтобы было соответствие типов для применения функции prepareAttributes
после, в общем случае это не необходимо
По поводу копирования — UICollectionViewFlowLayout
кэширует аттрибуты, и когда будет необходимо перелейаутить ячейки, он обратится в кэш и узнает, необходимо ли это с помощью isEqual:
. Модифицируя аттрибуты, которые мы получили через super, мы потенциально модифицируем этот кэш. Если мы попробуем это сделать без копирования, то, например, получим следующее сообщение в логе
UICollectionViewFlowLayout has cached frame mismatch for index path <NSIndexPath: 0x280664f60> {length = 2, path = 0 - 1} - cached value: {{37, 0}, {33, 66}}; expected value: {{33, 0}, {33, 66}}
This is likely occurring because the flow layout subclass PhotosApp.ThumbnailLayout is modifying attributes returned by UICollectionViewFlowLayout without copying them
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Понимаем UICollectionViewLayout на примере Photos App