Swift: Collection Просмотр изменения макета после вращения

У меня есть представление коллекции с 6 элементами и вы хотите отобразить их в 2 ячеек в строке и в 3 строках. Следующий код достигает этого (как взято из этого вопроса: Swift: Collection View не корректирует правильность изменения размера ) в формате iPhone красиво.

Однако на любом iPad макет представлений корректен, но если экран поворачивается в альбомный, а затем возвращается к портрету, то макет не полностью вписывается в представление и требует горизонтальной прокрутки, чтобы увидеть вторую ячейку (ширина ячейки как-то увеличила значение вторая ячейка в каждой строке частично отрезана).

override func viewDidLoad() { super.viewDidLoad() collectionView.dataSource = self collectionView.delegate = self flowLayout.scrollDirection = .horizontal flowLayout.minimumLineSpacing = 5 flowLayout.minimumInteritemSpacing = 5 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 6 } override func willRotate(to toInterfaceOrientation: UIInterfaceOrientation, duration: TimeInterval) { self.collectionView.collectionViewLayout.invalidateLayout() } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { if UIDevice.current.orientation.isLandscape { let totalWidth = collectionView.frame.width let totalHeight = collectionView.frame.height let heightOfCell = totalHeight / 2 let numberOfCellsPerRow = 1 let widthOfCell = CGFloat(Int(totalWidth) / numberOfCellsPerRow) return CGSize(width: widthOfCell , height: heightOfCell) } else { let totalWidth = collectionView.frame.width let totalHeight = collectionView.frame.height let heightOfCell = (totalHeight / 3) let numberOfCellsPerRow = 2 let widthOfCell = CGFloat(Int(totalWidth) / numberOfCellsPerRow) return CGSize(width: widthOfCell , height: heightOfCell) } } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { return UIEdgeInsetsMake(0, 5, 0, 5) } 

Перед вращением После вращения

Проблема здесь заключается в том, что рамка представления не обновляется при вызове 'willRotate'. Вместо этого попробуйте 'didrotate' или добавить наблюдателя 'NSNotification.Name.UIDeviceOrientationDidChange' и invalidateLayout коллекции внутри метода селектора. Не забудьте удалить наблюдателя на deinit ().

  • Передача данных в функцию #selector
  • SKSpriteNode zПоличный чертеж?
  • Невозможно убрать навигационный контроллер в Swift
  • Размер изображения, соответствующий размеру экрана
  • SDWebImage говорит, что «URL не найден», хотя он существует
  • Оптимизировать массив в Swift
  • NativeContentAdView не доступен для просмотра в UICollectionViewCell (Storyboard)
  • Xcode 6.1: шаблон UITableViewcontroller пуст
  • Измененный размер GMSCircle SDK GoogleMaps для iOS
  • Петля над NSDictionary с быстрым
  • Не удается щелкнуть пользовательский UICollectionViewCell
  • Давайте будем гением компьютера.