Мы используем UICollectionView для отображения ячейки, которая охватывает весь экран (минус статус и панель навигации). Размер ячейки устанавливается с self.collectionView.bounds.size
:
- (void)viewWillAppear:(BOOL)animated
{
//
// value isn't correct with the top bars until here
//
CGSize tmpSize = self.collectionView.bounds.size;
_currentCellSize = CGSizeMake( (tmpSize.width), (tmpSize.height));
}
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return _currentCellSize;
}
Это устанавливает правильный размер для каждого устройства. Каждая ячейка определена как не имеющая вставки, а макет не имеет верхнего или нижнего колонтитула. Однако, когда мы вращаемся от портрета к пейзажу, мы получаем следующую "жалобу":
the behavior of the UICollectionViewFlowLayout is not defined because:
the item height must be less that the height of the UICollectionView minus the section insets top and bottom values.
Теперь я понимаю эту ошибку, однако мы reset размер ячейки и используем макеты потоков, встроенные в переход вращения:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
//self.collectionView.bounds are still the last size...not the new size here
}
- (void)didRotateFromInterfaceOrientation: UIInterfaceOrientation)fromInterfaceOrientation
{
CGSize tmpSize = self.collectionView.bounds.size;
_currentCellSize = CGSizeMake( (tmpSize.width), (tmpSize.height));
[self.collectionView performBatchUpdates:nil completion:nil];//this will force the redraw/size of the cells.
}
Ячейки правильно отображаются в ландшафте.
Кажется, что в макете потока отображается размер старой ячейки (что вызывает жалобу, поскольку она будет слишком высокой), но читает/отображает новый размер ячейки в didRotateFromInterfaceOrientation
.
Есть ли способ избавиться от жалобы?
Мы попытались найти еще один крючок во время перехода на поворот устройства, который имеет доступ к правильному размеру целевого экрана (по сравнению с текущим размером экрана) без везения. Отладочный вывод показывает, что жалоба возникает после willRotateToInterfaceOrientation
, но до didRotateFromInterfaceOrientation
.
Мы также проверили очевидное; если мы установим высоту ячейки как фиксированный размер, меньший высоты ландшафта, жалоба не возникает. Кроме того, жалоба не возникает при повороте от пейзажа к портрету.
Все работает нормально и корректно отображается. Однако эта жалоба беспокоит нас. У кого-нибудь есть идеи или решения?