iOS 7: сохранение отображаемых элементов в области просмотра после поворота UICollectionView

Я используюUICollectionView с горизонтальной прокруткой (Layout =UICollectionViewFlowLayout). После поворота я настраиваю смещение содержимого так, чтобы те же элементы отображались до поворота. При вращении ширина элементов изменяется, потому что на экране всегда семь элементов. Мой текущий подход работает для iOS 8, но не для iOS 7.

На iOS 7layoutAttributesForItemAtIndexPath всегда возвращает одну и ту же позицию X независимо от ориентации. Таким образом, кажется, что некоторые кадры не правильно адаптированы. Расчет размера предметов кажется правильным, потому что они изменяются соответственно.

Это мой код:

Мой основной вид контроллера:

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

Метод из представления коллекции:

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

Код написан на C #, но это не должно вас беспокоить. Разумеется, вы можете опубликовать решения в Objective-C или Swift.

CurrentVisibleSection это раздел с семью пунктами. Это всегда актуально. когдаGetLayoutAttributesForItem или жеlayoutAttributesForItemAtIndexPath называется,GetSizeForItem или жеcollectionView:layout:sizeForItemAtIndexPath: вызывается до того, как установлено смещение содержимого.

Кто-нибудь знает, почему я всегда получаю один и тот же атрибут макета независимо от ориентации?

Редактировать:

Если я используюreloadData перед звонкомlayoutAttributesForItemAtIndexPath Я получаю правильный размер. Нужно ли это послеinvalidateLayout?

Что я также не понимаю, так это то, что представление коллекции имеет правильный размер (правильная ширина кадра).

Ответы на вопрос(0)

Ваш ответ на вопрос