iOS 7: mantendo os itens exibidos na área de visualização após a rotação do UICollectionView

Estou usando umUICollectionView com rolagem horizontal (Layout =UICollectionViewFlowLayout) Após a rotação, adapto o deslocamento do conteúdo para que os mesmos itens sejam exibidos antes da rotação. Na rotação, a largura dos itens é alterada, porque sempre existem sete itens na tela. Minha abordagem atual funciona no iOS 8, mas não no iOS 7.

No iOS 7layoutAttributesForItemAtIndexPath sempre retorna a mesma posição X, independentemente da orientação. Portanto, parece que algum quadro não está corretamente adaptado. O cálculo do tamanho dos itens parece estar correto, porque eles são alterados de acordo.

Este é o meu código:

Meu controlador de exibição principal:

public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)
{
    base.DidRotate (fromInterfaceOrientation);
    myProblematicCollectionView.invalidateLayout ();
}

O método da exibição de coleção:

public void invalidateLayout(){
    Layout.InvalidateLayout ();
    UICollectionViewLayoutAttributes layoutAttributesForItem = CollectionView.GetLayoutAttributesForItem (NSIndexPath.FromItemSection (0, CurrentVisibleSection));
    CollectionView.SetContentOffset (new CGPoint (layoutAttributesForItem.Frame.X, 0), false);      
}

O código está em C #, mas não deve incomodá-lo. Você pode usar soluções de correções em Objective-C ou Swift.

CurrentVisibleSection é a seção com os sete itens. Está sempre atualizado. QuandoGetLayoutAttributesForItem oulayoutAttributesForItemAtIndexPath é chamado, oGetSizeForItem oucollectionView:layout:sizeForItemAtIndexPath: é chamado antes que o deslocamento do conteúdo seja definido.

Alguém tem uma idéia de por que sempre recebo o mesmo atributo de layout, independentemente da orientação?

Editar:

Se eu usarreloadData antes de ligarlayoutAttributesForItemAtIndexPath Eu recebo o tamanho correto. Preciso disso depoisinvalidateLayout?

O que também não entendo é que a exibição da coleção tem o tamanho correto (a largura do quadro está correta).

questionAnswers(0)

yourAnswerToTheQuestion