2015-06-20 4 views
0

Я написал более detailed blog post по этой проблеме, но вот суть. У меня встроенный UICollectionView внутри другого UIViewController. Когда представление контейнера изменяет его границы, представление коллекции также изменяет его границы, которые также запускают его UICollectionViewLayout для повторной компоновки.UICollectionViewCell не может передать свои подпрограммы, когда макет UICV недействителен

Все хорошо, за исключением того, что ячейки не используют новый фрейм и макет с использованием старых границ. Это журнал из важных методов, где очевидно, что layoutSubviews использует неправильный (старый) фрейм.

__57-[RTColumnViewController processCalculatorKeypadVisible:]_block_invoke 

-[RTUnitLayout shouldInvalidateLayoutForBoundsChange:] : YES, {{0, 1014}, {272, 375}} -> {{0, 1014}, {175, 375}} 
-[RTUnitLayout prepareLayout], bounds={{0, 1014}, {175, 375}}, itemsize={175, 89} 
-[RTUnitLayout prepareForAnimatedBoundsChange:] : {{0, 1014}, {272, 375}} -> {{0, 1014}, {175, 375}} 

-[RTUnitLayout layoutAttributesForElementsInRect:] : rect={{0, 667}, {175, 1334}} 
__50-[RTUnitLayout layoutAttributesForElementsInRect:]_block_invoke_2 : <NSIndexPath: 0xc000000000048016> {length = 2, path = 0 - 9} frame={{0, 801}, {175, 89}} 
__50-[RTUnitLayout layoutAttributesForElementsInRect:]_block_invoke_2 : <NSIndexPath: 0xc000000000058016> {length = 2, path = 0 - 11} frame={{0, 979}, {175, 89}} 
... 

-[RTUnitLayout finalLayoutAttributesForDisappearingItemAtIndexPath:] : <NSIndexPath: 0xc000000000058016> {length = 2, path = 0 - 11} frame={{0, 979}, {272, 89}} 
-[RTUnitLayout initialLayoutAttributesForAppearingItemAtIndexPath:] : <NSIndexPath: 0xc000000000058016> {length = 2, path = 0 - 11} frame={{0, 979}, {175, 89}} 
-[RTUnitCell layoutSubviews] : pre-super: {{0, 979}, {272, 89}} 
-[RTUnitCell layoutSubviews] : post-super: {{0, 979}, {272, 89}} 
... 

-[RTUnitLayout finalizeAnimatedBoundsChange] : {{0, 1014}, {175, 375}} 

__57-[RTColumnViewController processCalculatorKeypadVisible:]_block_invoke623 : completed 

После того, как это сделано, если я просто слегка прокручивать UICV, это вызовет повторное отображение и все ячейки будут показаны, как они должны быть. Я просто потрясен, почему это не происходит во время первоначальной анимации, когда это нужно.

Любые идеи ..?

ответ

0

Вернулся от инженеров Apple. Если у вас есть пользовательский подкласс UICollectionViewLayoutAttributes, не делайте глупую ошибку, как я, и возвращаем форму YES isEqual: method.

Оно должно быть:

- (BOOL)isEqual:(id)other { 
... 
return [super isEqual:other]; 
} 

Подробнее в моем blog post.

Смежные вопросы